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 ?