[Résolu] Construction relation avec champs multiples

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.
Avatar de l’utilisateur
yves30
Membre hOOnoraire
Membre hOOnoraire
Messages : 192
Inscription : 18 nov. 2006 18:43
Localisation : France - Nîmes (Gard)

[Résolu] Construction relation avec champs multiples

Message par yves30 »

Bonjour

J'ai un souci avec la construction d'une relation contenant des champs multiples.

Ma base de données est un simple fichier d'adresses. La relation en question est située entre une table mère (intitulée "Ville") et une table fille (intitulée "NomAdresse"). La table "Ville" contient deux champs : "Ville" (le champ-clé) et "Département". La table "NomAdresse" contient un index, un champ "NomPrénom", un champ "Ville", et d'autres champs.

Pour l'instant, le champ "Département" ne figure que dans la table "Ville", et tout fonctionne de manière satisfaisante. Pour information, si je fais un double-clic sur la jointure, les options que j'ai retenues s'affichent dans la fenêtre "Relations" : "Mise à jour en cascade" (sous "Options d'actualisation") et "Aucune action" (sous "Supprimer les options").

Mon problème est le suivant : je souhaite que la table "NomAdresse" affiche également le contenu du champ "Département".

Pour ce faire, je crée dans la table "NomAdresse" un champ "Département" de même structure que celui déjà présent dans la table "Ville". Ensuite, pour modifier la relation entre les deux tables et indiquer au logiciel que je souhaite ajouter le champ en question, j'ouvre une nouvelle fois la fenêtre "Relations" : au-dessous de "Champs impliqués" (le champ "Ville" s'affiche déjà dans les deux tables en présence), j'ajoute simplement le champ "Département" dans chacune des deux colonnes.

Or quand je ferme la fenêtre "Relations" pour valider mes modifications, j'obtiens le message d'erreur suivant :
Primary unique constraint required on main table: "Ville" in statement [ALTER TABLE "NomAdresse" ADD FOREIGN KEY ("Ville", "Département") REFERENCES "Ville" ("Ville", "Département") ON UPDATE CASCADE ]
Mes modestes connaissances en anglais ne me permettant pas de comprendre la signification exacte du message en question, est-ce quelqu'un pourrait m'indiquer la procédure correcte pour obtenir l'affichage du champ "Département" dans la table "NomAdresse" ?

Merci d'avance pour votre aide.
Dernière modification par yves30 le 12 juin 2018 11:56, modifié 1 fois.
LibreOffice 7.6.5 Officielle, Mint 21.3 XFCE, PC Bureau Pentium dualcore G4400, 64 bits, 8 Go
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Construction d'une relation avec champs impliqués multip

Message par jeanmimi »

Bonjour,
La Relation entre les Tables Départements et Villes serait plutôt une relation 1 à N, à savoir un Département et plusieurs Villes de ce département. C'est cette Relation qui sera utilisée dans une Requête.
 Ajout : Mais si tu n'as qu'un seul Département à traiter, tu peux te simplifier le fonctionnement en n'ayant qu’une seule Table avec un champ Département et un champ Ville. Le seul inconvénient, c'est que tu auras à répéter autant de fois le nom du Département su'il y a de communes dans ce Département. 
Dans la table "NomAdresse" , qui contient un index, un champ "NomPrénom", un champ "Ville", tu conserves ton champs "Ville" de Type Zone de liste, ce champs stockera l'ID_Ville de la Table Villes.
Dernière modification par jeanmimi le 11 juin 2018 09:42, modifié 1 fois.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Avatar de l’utilisateur
yves30
Membre hOOnoraire
Membre hOOnoraire
Messages : 192
Inscription : 18 nov. 2006 18:43
Localisation : France - Nîmes (Gard)

Re: Construction d'une relation avec champs impliqués multip

Message par yves30 »

Merci pour cette réponse rapide, Jeanmimi

Mais il n'y a pas de table "Département".

Il y a seulement la table "Ville" [du côté du "1" de la relation] (avec les champs "Ville" et "Département") [du côté du "1"]...
Et la table "NomAdresse" [du côté du "N" de la relation], avec, entre autres les mêmes champs que ci-dessus

Ce que je cherche à comprendre, c'est, la signification du message d'erreur j'ai indiqué dans mon premier message, et/ou, la procédure à suivre pour obtenir l'affichage correct du champ "Département" dans la table fille "NomAdresse".
LibreOffice 7.6.5 Officielle, Mint 21.3 XFCE, PC Bureau Pentium dualcore G4400, 64 bits, 8 Go
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Construction d'une relation avec champs impliqués multip

Message par jeanmimi »

Le message d'erreur signale que tu as une incompatibilité de relation entre les Tables par une contrainte sur les clés primaires.
Mais comme je ne vois pas ta Base, il est difficile de te suggérer une solution.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: Construction d'une relation avec champs impliqués multip

Message par Piaf »

Bonjour
yves30 a écrit : la procédure à suivre pour obtenir l'affichage correct du champ "Département" dans la table fille "NomAdresse".
Il est toujours possible de le faire
Form.png
mais comme précisé par jeanmimi ton modèle relationnel ne me parait pas correct.
Dans la table ville tu vas devoir stocker le département autant de fois qu'il y a de villes de ce département (Attention aux fautes de frappes ou d'accent etc...)
Dans la table NomPrenom tu vas stocker les mêmes informations (redondance, redondance :lol: )
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Avatar de l’utilisateur
yves30
Membre hOOnoraire
Membre hOOnoraire
Messages : 192
Inscription : 18 nov. 2006 18:43
Localisation : France - Nîmes (Gard)

Re: Construction d'une relation avec champs impliqués multip

Message par yves30 »

Bonjour

Merci à Piaf et Jeanmimi pour votre aide.

En fait j'ai trouvé la solution :

(1) Il me fallait tout d'abord créer les trois tables (Département, Ville et NomAdresse) avec des relations "1-n", d'une part entre les tables "Département" et "Ville", d'autre part entre les tables "Ville" et "NomAdresse".

(2) Ensuite (et c'est là que je n'avais pas bien compris la procédure), il était nécessaire de passer par une requête, intégrant tous les champs indexés des tables concernées. Ce que j'ai fait.

(3) Enfin, à partir de cette requête, j'ai réalisé sans problème un formulaire contenant les trois champs que je souhaitais pouvoir modifier, à savoir "Département", "Ville", "Nom", "Adresse".

Je vous transmets le fichier en PJ (j'aurais dû d'ailleurs commencer par là), afin que vous puissiez vérifier si je n'ai pas commis d'erreur dans les relations.

Merci encore.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.6.5 Officielle, Mint 21.3 XFCE, PC Bureau Pentium dualcore G4400, 64 bits, 8 Go
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Résolu] Construction relation avec champs multiples

Message par Piaf »

Bonjour
Pas compris ta méthode.
Le champ département dans la table NomAdresse ne sert à rien puisqu'il n'est pas renseigné.
Les personnels n'ayant pas de ville, n'apparaissent pas dans ton formulaire.
A partir de ton formulaire, comment modifies-tu une ville ou un département ?
Je préfère personnellement une solution qui me parait plus simple.
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64