Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Modélisation
Modélisation Le forum qui vous aide à résoudre vos questions relatives à la modélisation (tables et relations) de votre base de données sous Access. Pour les états et les formulaires, postez dans le forum IHM.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/04/2011, 03h32   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2009
Messages : 35
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 35
Points : 14
Points : 14
Par défaut relation double assurant "l'intégrité référentielle"

Bonjour,

Cherchant à perfectionner ma connaissance d'Access et des BDDR en général, j'essaie d'implémenter des exemples de base de donnée, et à résoudre les problèmes que je rencontre. Je "travaille" donc en ce moment sur une base de donnée de gestion de rencontres sportives.

LE PROBLEME:
Je rencontre un problème de modélisation que je ne parvient pas à résoudre... J'ai une table Teams (assez explicite selon moi), et une table Matches destinée à accueillir les rencontres. Cette table contient entre autre 2 champs awayTeam et homeTeam. Seul problème : il me faudrait une "double relation" entre Team.idTeam et ces 2 champs ce qui empêche, sous Access, d'activer l'intégrité référentielle.

MA SOLUTION (qui ne marche pas, sinon je ne serais pas là ) :
De mon côté, je me suis penché sur un contournement possible... J'ai créé des tables intermédiaires AwayTeams et HomeTeams qui contiennent chacune un id en relation 1-1 avec Teams.idTeam . Côté Matches, chacune est en relation 1-n avec son champ correspondant.

Mais je ne sais pas du tout gérer la relation 1-1 qui est créée entre ces tables intermédiaires et Teams. La création d'équipe génère une erreur m'indiquant qu'il n'y a pas d'enregistrement équivalent dans les tables intermédiaires - ce qui est logique.

MES QUESTIONS
- Y a-t-il une solution au problème initial (relation vers 2 champs) qui puisse éviter ma méthode ?
- Ma méthode serait nickel si on pouvait faire des relations 1-(0,1) plutôt que la relation 1-1 très contraignante. Est-ce possible ? La relation 1-n (sans indexer mes tables intermédiaires) fonctionnerait pour ça mais permettrait les doublons... (et puis une table sans index,c'est moche )
- Si vous n'avez pas su répondre aux question précédentes, peut-être saurez-vous me renseigner sur la gestion des relations 1-1 ?


Je suis sous Access 2010, si ça change quoi que ce soit...

Merci pour votre aide, quelle qu'elle soit
cycloop est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2011, 10h33   #2
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 410
Points : 4 439
Points : 4 439
bonjour cycloop,

dans ce cas particulier avec la table Match à relier deux fois avec la table Team, Access a une façon bien curieuse de représenter les deux rôles (équipe à domicile, équipe à l’extérieur).

Voir un exemple dans le message :
Avec ACCESS représenter les deux rôles est possible, même si la façon de devoir procéder est plutôt débile

il faut donc ajouter une deuxième fois la table Team dans la fenêtre des relations d'Access.
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2011, 15h04   #3
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Cycloop et Fabien,

Citation:
Envoyé par Fabien
.../... Access a une façon bien curieuse de représenter les deux rôles .../...
si je peux me permettre, je la qualifierais plutôt de particulière et due au fait, comme je l'ai lu fort justement dans ce forum, que Access est une sorte de passerelle entre Excel et un plus gros SGBD (DB2, Oracle, etc...).

Je ne possède pas d'action chez Microsoft et, en plus, je ne connais pas très bien Access, mais je pense que les analystes de chez Microsoft ont pondu une forme particulière pas trop mal réussie et surtout gérable, par la suite, et plus ou moins facilement, par des assistants divers et variés (cardinalités unidirectionnelles et "réduites").
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2011, 20h48   #4
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 410
Points : 4 439
Points : 4 439
re,

débile, curieuse, particulière… comme tu veux.

Le fait est que lorsque tu veux relier la table Equipe deux fois à la table Match(idMatch, DateMatch,…, #idEquipeDomicile, #idEquipeExterieur) au niveau SQL et dans n’importe quel SGBD tu écrirais un truc du genre :

Code sql :
1
2
3
4
5
6
7
ALTER TABLE [Match]
ADD CONSTRAINT [fk_EquipeDomicile]
FOREIGN KEY ([idEquipeDomicile]) REFERENCES [Equipe] ([idEquipe]) ;

ALTER TABLE [Match]
ADD CONSTRAINT [fk_EquipeExterieur] 
FOREIGN KEY ([idEquipeExterieur]) REFERENCES [Equipe] ([idEquipe]) ;
…tu références deux fois la table Equipe ce qui passe très bien même sous Access mais pourtant la fenêtre des relations ne peut s’empêcher d’afficher cette "table" Equipe_1 :

Equipe-1-----∞-Match-∞------1-Equipe_1

Par contre, malgré l’affichage précédent, lorsque j’écris une requête avec le QBE en faisant participer les tables Equipe et Match, on obtient par défaut ce qu'on aurait voulu voir dans la fenêtre des relations:

Equipe-1------∞-Match
|..........................|
1.........................
+------------------+

Mais ici cela s’avère très parce que si je veux obtenir la liste des matchs avec les noms des deux équipes, je vais être obligé de casser une des relations pour revenir finalement à :
Equipe-1-----∞-Match-∞------1-Equipe_1

Bref, c’est Didier l’embrouille ce truc…

Citation:
Envoyé par Richard_35
…cardinalités unidirectionnelles et "réduites".
C’est du vocabulaire emprunté à Excel ou à Oracle ? Je ne comprends pas ce que cela signifie.
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2011, 23h13   #5
Candidat au titre de Membre du Club
 
Inscription : juillet 2009
Messages : 35
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 35
Points : 14
Points : 14
Merci bien pour vos réponses !

ça a l'air de marcher. Je me demande juste comment je vais gérer les autres relations de la table Teams maintenant. Est ce que je dois systématiquement créer un lien vers "Teams" et vers "Teams_1" ?
cycloop est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 00h00   #6
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Citation:
Envoyé par Richard_35
…cardinalités unidirectionnelles et "réduites".
Code Fabien :
C’est du vocabulaire emprunté à Excel ou à Oracle ? Je ne comprends pas ce que cela signifie.
OK, j'admets que c'est un peu pompeux...

Je voulais dire que toutes les cardinalités habituelles (merisiennes, par exemple) sont remplacées par :
A 1---[relation]---∞ B
ou
A 1---[relation]---1 B
==> réduites, donc, et paraissant dans le même sens : il n'y a que B qui varie.

Ceci dit, je trouve que ce n'est pas mal pensé. Les analystes de chez MS ont bien bossé, pour l'objectif qui leur était, sans doute fixé : la simplification maximale des cardinalités.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 18h32   #7
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 410
Points : 4 439
Points : 4 439
Citation:
Envoyé par cycloop Voir le message
... Je me demande juste comment je vais gérer les autres relations de la table Teams maintenant. Est ce que je dois systématiquement créer un lien vers "Teams" et vers "Teams_1" ?
par exemple avec,

Team-1-----∞-Match-∞------1-Team_1

AutreTable(idAutreTable,..., #idTeam)
AutreTable-∞------1-Team

EncoreUneAutreTable(id, ..., #idTeam)
EncoreUneAutreTable-∞------1-Team

DerniereTable(id, ...., #idTeamRoleA, #idTeamRoleB, #idTeamRoleC)

DerniereTable-∞------1-Team
......|
......+-∞-------------1-Team_2
......|
......+-∞-------------1-Team_3

Quoi que ça devrait aussi marcher avec:
DerniereTable-∞------1-Team_2
......|
......+-∞-------------1-Team_3
......|
......+-∞-------------1-Team_4
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 23h41   #8
Candidat au titre de Membre du Club
 
Inscription : juillet 2009
Messages : 35
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 35
Points : 14
Points : 14
Ok ! pas besoin de lier les 2 tables à chaque fois alors !

Merci à tous pour votre aide
cycloop est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h36.


 
 
 
 
Partenaires

Hébergement Web