Données dupliquées et non liées

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
JLBA
Membre lOOyal
Membre lOOyal
Messages : 27
Inscription : 27 sept. 2018 09:40

Données dupliquées et non liées

Message par JLBA »

Bonsoir,
Je découvre LibreOffice Base pour créer un petit outil de gestion pour une association.

Je cherche comment dans une liaison, dupliquer les donnée d'une table vers l'autre et non seulement les lier. Comme lorsqu'on duplique les coordonnées d'un client dans les champs correspondants d'une facture pour que la facture ne soit pas modifiée si le client change d'adresse plus tard.

Merci de votre aide.
LibreOffice 6.4 sous Ubuntu 18.04 LTS || LibreOfice 7 sous Ubuntu 20.04
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Données dupliquées et non liées

Message par jeanmimi »

Onjour
Si c'est comme dans une facture, il faut lier les tables dans une requête.
Cette requête peut être utilisée directement ou sous forme de vue dans un Rapport.
Il y a de nombreux exemples dans le forum.
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
JLBA
Membre lOOyal
Membre lOOyal
Messages : 27
Inscription : 27 sept. 2018 09:40

Re: Données dupliquées et non liées

Message par JLBA »

Merci jeanmimi,

Si je lie les tables dans une requête, les données sont copiées de l'une à l'autre et pas seulement liées ?

Pour préciser ma demande avec l'exemple de la facture.

Dans T_Clients, j'ai par exemple, id_Client, nom, adresse, cp et ville.

Si je lie seulement T_Client et T_Factures sur id_Client, les données d'adresse sont les donnée de T_Client

Si je crée les champs équivalents Nom, adresse, CP et Ville dans T_Factures, comment je fais pour que suivant le lien basé sur id_Client, les données soient copiées de T_Client::Nom vers T_Factures::Nom etc… ?

Merci.
LibreOffice 6.4 sous Ubuntu 18.04 LTS || LibreOfice 7 sous Ubuntu 20.04
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Données dupliquées et non liées

Message par jeanmimi »

Je comprends l'interrogation, mais ici, on est dans une Base relationnelle, il n'est donc pas nécessaire de copier des données redondantes comme on le ferait dans Calc.
 Ajout : Ce lien illustre un exemple de relation :
https://forum.openoffice.org/fr/forum/v ... nt#p319594 
Tu peux bien sur joindre ton ébauche de Base pour faciliter les test et l'aide.
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
JLBA
Membre lOOyal
Membre lOOyal
Messages : 27
Inscription : 27 sept. 2018 09:40

Re: Données dupliquées et non liées

Message par JLBA »

Je connais le principe. J'ai déjà développé des bases de données. C'est même pour ça que je teste Base pour arrêter de faire des listes sous Calc.

Ceci dit dans mon exemple, oui il est nécessaire de dupliquer les données parce qu'une facture doit pouvoir être non modifiable une fois validée. Or si plus tard le client change d'adresse et qu'encore plus tard je dois rééditer la facture, elle s'affichera avec la nouvelle adresse du client ce qui n'est pas valide. C'est encore plus vrai avec les montants des produits sur la facture. Si les prix changent, ce qui arrive régulièrement, ils ne faut pas qu'ils changent sur la facture si on la réédite.

D'où la nécessité que les coordonnées du clients soient "en dur" dans la facture ou les prix des produits dans les enregistrements de Lignes_factures.

D'où ma question.
LibreOffice 6.4 sous Ubuntu 18.04 LTS || LibreOfice 7 sous Ubuntu 20.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: Données dupliquées et non liées

Message par Dude »

Salut,
JLBA a écrit :il est nécessaire de dupliquer les données parce qu'une facture doit pouvoir être non modifiable une fois validée
La facture étant inaliénable et unique, il suffit d'en conserver un duplicata dans un répertoire dédié.
Dans ta base, tu ne conserves alors que le lien vers son emplacement.
JLBA
Membre lOOyal
Membre lOOyal
Messages : 27
Inscription : 27 sept. 2018 09:40

Re: Données dupliquées et non liées

Message par JLBA »

C'est effectivement une solution merci. Mais ça ne répond pas à ma question :-) J'ai pris l'exemple d'une facture mais ça n'est pas pour une facture. Donc, quelle fonction, macro ou requête je peux utiliser si je veux sélectionner un enregistrement dans une table et que ses données soient copiées dans les champs correspondants d'une autre table ?

(Je précise que ce que je demande n'est pas une invention de ma part mais une expliqué dans des tutos autour d'autres sgbdr.)

Merci
LibreOffice 6.4 sous Ubuntu 18.04 LTS || LibreOfice 7 sous Ubuntu 20.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: Données dupliquées et non liées

Message par Dude »

JLBA a écrit :Mais ça ne répond pas à ma question
La redondance de données est à proscrire dans un modèle relationnel propre.
Donc je ne vois pas dans quel cas, on aurait besoin de dupliquer des informations.
Donne moi un exemple où il faudrait ce processus.
JLBA a écrit :si je veux sélectionner un enregistrement dans une table et que ses données soient copiées dans les champs correspondants d'une autre table
Une simple requête INSERT issue d'un SELECT permet de faire l'opération.
Mais comme d'habitude, on parle dans le vide et puisque nous sommes hors contexte(*), je te laisse le soin d'adapter.


(*) Fournir le contexte signifie joindre un document explicatif et exhaustif permettant de comprendre la problématique.
JLBA
Membre lOOyal
Membre lOOyal
Messages : 27
Inscription : 27 sept. 2018 09:40

Re: Données dupliquées et non liées

Message par JLBA »

Effectivement, je donnais un exemple type pour connaître le principe.

Si on garde effectivement l'exemple d'un système de facturation vu que comme tu le dis, elle doit être infalsifiable une fois validée.
Imaginons une T_Produits, une T_factures liées en n à n par une table intermédiaire T_LignesFacture. Et un lien entre la table T_Produit :Id_Produit et T_LignesFacture:RefProduit.

J'établis ma facture en ajoutant des enregistrements dans T_LignesFacture avec les références aux produits achetés.

Mais si 1 mois après je change le prix d'un des produits dans T_Produits et que je réaffiche ma facture, le montant de la facture sera modifié puisque le prix d'un des produits liés sera différent.

Par contre, si dans T_LignesFacture, j'ai des champs libellé et prix, à la création de la facture, j'y copie les libellés et les prix des champs correspondants de T_Produits. Si quelques temps après, le prix d'un produit change, la facture affichera elle toujours le prix copié au moment où on l'a établie.

Il y a certainement d'autres techniques comme une T_Prix liée à la T_Produits qui permet de garder en plus un historique des prix mais c'est plus lourd à gérer. C'est donc un cas où il me semble que la duplication est utile voire nécessaire.
LibreOffice 6.4 sous Ubuntu 18.04 LTS || LibreOfice 7 sous Ubuntu 20.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: Données dupliquées et non liées

Message par Dude »

JLBA a écrit :elle doit être infalsifiable une fois validée
Donc, c'est un document qui ne sera généré qu'une seule fois.
JLBA a écrit :et que je réaffiche ma facture
Et donc, il n'y a pas à garder un quelconque historique.
JLBA
Membre lOOyal
Membre lOOyal
Messages : 27
Inscription : 27 sept. 2018 09:40

Re: Données dupliquées et non liées

Message par JLBA »

Dude a écrit :
JLBA a écrit :elle doit être infalsifiable une fois validée
Donc, c'est un document qui ne sera généré qu'une seule fois.
Je ne parle pas de regénérer la facture juste de la réafficher pour en sortir un duplicata par exemple ou si on veut extraire les données annuelles pour les analyser.
Si les lignes de facture sont seulement liées aux produits, si le produit a changé de prix, la ligne de facture changera de montant. C'est logique.

Par contre, si au moment de la création, on copie les données dans la ligne de facture, ces données ne bougent plus.
JLBA a écrit :et que je réaffiche ma facture
Et donc, il n'y a pas à garder un quelconque historique.
On peut vouloir garder un historique pour analyser l'évolution des prix.
LibreOffice 6.4 sous Ubuntu 18.04 LTS || LibreOfice 7 sous Ubuntu 20.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: Données dupliquées et non liées

Message par Dude »

JLBA a écrit :juste de la réafficher pour en sortir un duplicata
Bis repetitae :
Dude a écrit :il suffit d'en conserver un duplicata dans un répertoire dédié.
Dans ta base, tu ne conserves alors que le lien vers son emplacement
JLBA
Membre lOOyal
Membre lOOyal
Messages : 27
Inscription : 27 sept. 2018 09:40

Re: Données dupliquées et non liées

Message par JLBA »

Dude a écrit :il suffit d'en conserver un duplicata dans un répertoire dédié.
Dans ta base, tu ne conserves alors que le lien vers son emplacement
Donc je vais utiliser de l'espace de stockage pour conserver des pdf "au cas où plutôt que de conserver un petit nombre dans une table ?

De plus, tu as oublié la fin de la phrase :
ou si on veut extraire les données annuelles pour les analyser.
Comment on fait dans ce cas là, si on n'est pas sûr du montant de la facture enregistrée ?

Je répète que j'ai posé la question parce que le principe est expliqué dans des tutos par des développeurs professionnels sur d'autres SGBDR. Je ne l'ai pas imaginé tout seul.
LibreOffice 6.4 sous Ubuntu 18.04 LTS || LibreOfice 7 sous Ubuntu 20.04
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Données dupliquées et non liées

Message par jeanmimi »

Peux-tu indiquer les liens vers les tutoriels pour voir le code SQL décrits ?
Quant au code cité par Dude, on le trouve dans ce guide en ligne :
https://wiki.openoffice.org/wiki/FR/Doc ... h09#INSERT
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
JLBA
Membre lOOyal
Membre lOOyal
Messages : 27
Inscription : 27 sept. 2018 09:40

Re: Données dupliquées et non liées

Message par JLBA »

jeanmimi a écrit :Peux-tu indiquer les liens vers les tutoriels pour voir le code SQL décrits ?
Je n'ai pas d'exemples avec du code SQL puisque c'était avec Filemaker qui propose son propre langage de macro évolué qui permet de faire ça facilement (avec même une fonction spécifique). Mais je veux bien apprendre à le faire en SQL ou en Macro

Mais je parle ici de principe :
- sélectionner un produit dans une table
- copier (dans des variables ?) les infos correspondantes
- aller dans l'autre table, créer un enregistrement et "coller" les données dans les champs correspondant.
Quant au code cité par Dude, on le trouve dans ce guide en ligne :
https://wiki.openoffice.org/wiki/FR/Doc ... h09#INSERT
Merci. J'ai encore un peu de mal à trouver les sources d'info sur Base.
LibreOffice 6.4 sous Ubuntu 18.04 LTS || LibreOfice 7 sous Ubuntu 20.04
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Données dupliquées et non liées

Message par jeanmimi »

Pour la demande d'historique des prix, il est nécessaire d'avoir dans la Table des produits la date de mise à jour des nouveaux prix.
Ce qui aura pour avantage de figer les factures à leurs dates de création.
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
JLBA
Membre lOOyal
Membre lOOyal
Messages : 27
Inscription : 27 sept. 2018 09:40

Re: Données dupliquées et non liées

Message par JLBA »

jeanmimi a écrit :Pour la demande d'historique des prix, il est nécessaire d'avoir dans la Table des produits la date de mise à jour des nouveaux prix.
Ce qui aura pour avantage de figer les factures à leurs dates de création.
Ok. C'est peut être même le moment d'utiliser une clef composite qui contiendrait cette date…

Mais ma question initiale ne porte pas sur la possibilité d'historique mais sur comment je traduis en requête SQL la récupération des données d'un enregistrement d'une table pour aller les mettre dans un nouvel enregistrement d'une autre table…
LibreOffice 6.4 sous Ubuntu 18.04 LTS || LibreOfice 7 sous Ubuntu 20.04
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Données dupliquées et non liées

Message par jeanmimi »

La réponse a été donnée : INSERT dans un SELECT avec l'exemple dans le lien vers le Guide HSQLDB.
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
JLBA
Membre lOOyal
Membre lOOyal
Messages : 27
Inscription : 27 sept. 2018 09:40

Re: Données dupliquées et non liées

Message par JLBA »

jeanmimi a écrit :La réponse a été donnée : INSERT dans un SELECT avec l'exemple dans le lien vers le Guide HSQLDB.
Ok. Merci.

J'utilise LO 6.2.8. La base a été automatiquement créée en Firebird. J'imagine que ça fonctionne pareil au moins à ce niveau.
LibreOffice 6.4 sous Ubuntu 18.04 LTS || LibreOfice 7 sous Ubuntu 20.04
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Données dupliquées et non liées

Message par jeanmimi »

Les commandes SQL peuvent être différentes :
https://wiki.documentfoundation.org/Doc ... ES_TO_COME
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
JLBA
Membre lOOyal
Membre lOOyal
Messages : 27
Inscription : 27 sept. 2018 09:40

Re: Données dupliquées et non liées

Message par JLBA »

Merci bien.

Pour tout ce qui est indiqué "No fonction" : ça n'est pas encore implémenté ou il n'y aura pas ?
LibreOffice 6.4 sous Ubuntu 18.04 LTS || LibreOfice 7 sous Ubuntu 20.04
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Données dupliquées et non liées

Message par jeanmimi »

De ce que j'ai constaté, les fonctions sont implantées progressivement.
C'est possible d'en avoir un aperçu dans le forum :
https://forum.openoffice.org/fr/forum/s ... rebird+SQL
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Verrouillé