Bonjour,
Voici un MCD reprenant en partie celui d’une discussion créée dans le forum Schéma, voir le post #52. Dans ce MCD, on se contente des deux entités-types qui posent problème, MARQUE et MODELE (marque de voiture et modèle dans la marque) :
Code SQL produit pat Looping :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 CREATE TABLE MARQUE( marqueId INT AUTO_INCREMENT, marqueNom VARCHAR(48) NOT NULL, CONSTRAINT MARQUE_PK PRIMARY KEY(marqueId), CONSTRAINT MARQUE_AK UNIQUE(marqueNom)); CREATE TABLE MODELE( modeleId INT AUTO_INCREMENT, modeleNom VARCHAR(48) NOT NULL, marqueId INT NOT NULL, CONSTRAINT MODELE_PK PRIMARY KEY(modeleId), CONSTRAINT MODELE_MARQUE_FK FOREIGN KEY(marqueId) REFERENCES MARQUE(marqueId));
A posteriori, il avait été jugé préférable d’utiliser l’identification relative :
Mais c’était un peu tard.
Cela dit, on devrait pouvoir demander à Looping de produire le code SQL suivant pour la table MODELE, où la paire {marqueId, modeleId} serait clé alternative :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 CREATE TABLE MODELE( modeleId INT AUTO_INCREMENT, modeleNom VARCHAR(48) NOT NULL, marqueId INT NOT NULL, CONSTRAINT MODELE_PK PRIMARY KEY(modeleId), CONSTRAINT MODELE_marqueId_modeleId_AK UNIQUE(marqueId, modeleId), CONSTRAINT MODELE_MARQUE_FK FOREIGN KEY(marqueId) REFERENCES MARQUE(marqueId)
A cet effet, si j’ai bien compris, on procède ainsi :
Dans un premier temps, dans la fenêtre Propriétés (MLD – SQL), pour "Proposer index composé" on choisit OUI.
Ceci fait, dans le MCD on clique sur la patte connectant l’entité-type MARQUE et l’association Avoir. Looping me propose alors une fenêtre "Cardinalité", dans laquelle je précise comment je vois la construction de l’index composé, à savoir la paire {marqueId, modeleId} :
Consciencieusement je répète la structure de l’index composé pour la rubrique modeleId de l’entité-type MODELE :
Code SQL produit par Looping :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 CREATE TABLE MARQUE( marqueId INT AUTO_INCREMENT, marqueNom VARCHAR(48) NOT NULL, CONSTRAINT MARQUE_PK PRIMARY KEY(marqueId), CONSTRAINT MARQUE_AK UNIQUE(marqueNom)); CREATE TABLE MODELE( modeleId INT AUTO_INCREMENT, modeleNom VARCHAR(48) NOT NULL, marqueId INT NOT NULL, CONSTRAINT MODELE_PK PRIMARY KEY(modeleId), CONSTRAINT MODELE_marqueId_modeleId_AK UNIQUE(modeleId, marqueId), CONSTRAINT MODELE_MARQUE_FK FOREIGN KEY(marqueId) REFERENCES MARQUE(marqueId));
Soit. Je mets toutefois un bémol :
Pour la contrainte MODELE_marqueId_modeleId_AK j’attendais la paire {marqueId, modeleId}, mais Looping permute les éléments et me propose la paire {modeleId, marqueId}...
D’accord, ça n’est pas fondamental, mais ça perturbe un poil...
Paprick, ai-je raté quelque chose dans ma construction ?
Partager