[MySQL]cardinalité 1,n -- 1,n et clé étrangere

cardinalité 1,n -- 1,n et clé étrangere [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 11-08-2005 à 21:30:15    

salut
j'ai comme mcd :
 
tableModule ---(1,n)---(relation)---(1,n)---tableEtudiant
 
cela me donne une table supplémentaire [relation] qui contient l'attribut clé primaires de tableModule et l'attribut clé primaires de tableEtudiant
 
ca donne en mysql pour la creation de cette table relation :
create table RELATION
   (
   ID_TableModule           varchar(32)      not null,
   ID_TableEtudiant         int              not null,
   primary key (ID_TableModule, ID_TableEtudiant)
   );
 
ma question est de savoir si mysql gére tout seul le peuplement de cette table relation pendant que j'insere des données dans table Module et table Etudiant ? ou il faut que je verifie avec php et d'inserer "manullement" la table relation ?
 
Et si je choisis d'utiliser les tables InnoDB, la table relation aurait un champ en plus (en identifiant resultant de la concatenation de clé primaire des 2 tables module et etudiant) ?
ca donne ca ? :
 
create table RELATION
   (
   ID_concatene           int auto_increment not null,
   ID_TableModule         varchar(32)        not null,
   ID_TableEtudiant       int                not null,
   primary key (ID_concatene)
   );
 
 
a+

Reply

Marsh Posté le 11-08-2005 à 21:30:15   

Reply

Marsh Posté le 12-08-2005 à 09:51:27    

axo a écrit :

salut
j'ai comme mcd :
 
tableModule ---(1,n)---(relation)---(1,n)---tableEtudiant
 
cela me donne une table supplémentaire [relation] qui contient l'attribut clé primaires de tableModule et l'attribut clé primaires de tableEtudiant
 
ca donne en mysql pour la creation de cette table relation :
create table RELATION
   (
   ID_TableModule           varchar(32)      not null,
   ID_TableEtudiant         int              not null,
   primary key (ID_TableModule, ID_TableEtudiant)
   );
 
ma question est de savoir si mysql gére tout seul le peuplement de cette table relation pendant que j'insere des données dans table Module et table Etudiant ? ou il faut que je verifie avec php et d'inserer "manullement" la table relation ?


 
il faut que tu insere manuellement sous php car si tu veux inserer un etudiant sans module, il n'y aura pas d'insertion dans RELATION
 

axo a écrit :


Et si je choisis d'utiliser les tables InnoDB, la table relation aurait un champ en plus (en identifiant resultant de la concatenation de clé primaire des 2 tables module et etudiant) ?
ca donne ca ? :
 
create table RELATION
   (
   ID_concatene           int auto_increment not null,
   ID_TableModule         varchar(32)        not null,
   ID_TableEtudiant       int                not null,
   primary key (ID_concatene)
   );
 
 
a+


 
 
si tu met auto_increment , la cle ne sera pas la concatenation de ID_TableModule et ID_TableEtudiant : ca sera un entier incrementé pour chaque tuple que tu inseres !
 

Reply

Marsh Posté le 12-08-2005 à 15:05:43    

merci ali0baba pour tes remarques.
je vois ce que tu veux dire a propos de l'etudiant sans module , mais ca fait quoi si on insere rien dans la table relation ? ca ne fauchera pourtant pas les données qui conserne l'etudiant , non ? s'il n'y a pas  des 2 key primaire qui relit Module à Etudiant , il ne peut pas y avoir de probleme .  
juste pour une question technique : si l'etudiant est obligé de prendre au moins une module (faut bien qu'il bosse un peu ce faineant  :whistle:  ) Mysql genere-t-il automatiquement les key de la table Relation qui devient :
create table RELATION
   (
   ID_TableModule         varchar(32)        not null,
   ID_TableEtudiant       int                not null,
   primary key (ID_TableModule ,ID_TableEtudiant)
   );
 
Et dans ma lancée , si je veux connaitre les presences des etudiants, je fais ca ?:  
 
tabModule--(1,n)--[relation2]--(1,1)--tabSession--(1,n)--[ralation3]--(1,1)--tabCours
 
dans mon cas chaque module a plusieurs session pendant l'année, et chaque session a plusieurs cours. Cela vaut-t-il la peine de créer une table "presence" ou bien juste créer un attribut supplementaire dans la table tabCours  
 
 

Reply

Marsh Posté le 12-08-2005 à 15:48:58    

Si tu insere rien dans la table relation, ca ne possera pas de probleme au niveau de la bd mais ca ne respectera pas ton mcd de depart
 
et pour pouvoir genere automotiquement un tuple dans la table relation " si l'etudiant est obligé de prendre au moins une module " il faut que tu creer un trigger on insert etudiant ...

Reply

Marsh Posté le 12-08-2005 à 19:04:11    

ok je comprend mieux !
merci  encore pour ton aide
a+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed