Page 1 sur 1

Données dupliquées et non liées

Publié : 24 nov. 2019 00:08
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.

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

Publié : 24 nov. 2019 09:11
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.

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

Publié : 24 nov. 2019 10:18
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.

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

Publié : 24 nov. 2019 14:04
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.

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

Publié : 24 nov. 2019 17:10
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.

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

Publié : 24 nov. 2019 19:14
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.

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

Publié : 24 nov. 2019 19:44
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

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

Publié : 24 nov. 2019 20:04
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.

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

Publié : 25 nov. 2019 09:59
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.

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

Publié : 25 nov. 2019 12:31
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.

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

Publié : 25 nov. 2019 13:34
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.

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

Publié : 25 nov. 2019 14:39
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

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

Publié : 25 nov. 2019 15:28
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.

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

Publié : 25 nov. 2019 15:52
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

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

Publié : 25 nov. 2019 18:52
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.

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

Publié : 25 nov. 2019 21:28
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.

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

Publié : 25 nov. 2019 22:17
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…

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

Publié : 25 nov. 2019 22:35
par jeanmimi
La réponse a été donnée : INSERT dans un SELECT avec l'exemple dans le lien vers le Guide HSQLDB.

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

Publié : 25 nov. 2019 22:37
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.

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

Publié : 26 nov. 2019 05:49
par jeanmimi
Les commandes SQL peuvent être différentes :
https://wiki.documentfoundation.org/Doc ... ES_TO_COME

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

Publié : 26 nov. 2019 08:17
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 ?

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

Publié : 26 nov. 2019 09:50
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