Bonsoir à tous,
Voici un sujet particulièrement intéressant
!!!
En effet, lors du passage du MCD au MLD/LDD, on ne fait guère cas de la différence entre une cardinalité 1,n ou 0,n
...
J'aimerais ramener le sujet à un exemple plus simple et particulièrement significatif. En effet, autant il est fréquent qu'il soit acceptable de négliger cette différence (par exemple, créer un client avant de lui créer ses factures, ou créer un enseignant avant de lui affecter ses cours, ...), autant il n'est pas envisageable qu'une facture puisse exister sans au moins une ligne de facture.
J'aimerai donc traiter cette situation avec mes étudiants, et comme vous vous êtes lancés de manière efficace sur le sujet, pourriez-vous me proposer une solution la plus simple et la plus générique possible (et donc acceptable, entre autre, par MySQL) pour le cas standard suivant :
Pièce jointe 651835
Looping génère le LDD suivant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| CREATE TABLE Facture(
NumFac SMALLINT,
DateF DATE,
PRIMARY KEY(NumFac)
);
CREATE TABLE Produit(
Réf CHAR(3),
Désignation VARCHAR(50),
Prix DECIMAL(19,4),
PRIMARY KEY(Réf)
);
CREATE TABLE LigneFac(
NumFac SMALLINT,
Réf CHAR(3),
Quantité INT,
PRIMARY KEY(NumFac, Réf),
FOREIGN KEY(NumFac) REFERENCES Facture(NumFac) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY(Réf) REFERENCES Produit(Réf) ON DELETE CASCADE ON UPDATE CASCADE); |
La CASCADE en cas de suppression de la facture est bien prise en compte par
Looping, mais l'inverse reste à faire, et surtout l'insertion obligatoire d'une ligne n'est pas traitée.
Bref, on est en plein dans votre sujet, mais avec un seul côté à traiter, car un produit peut exister même s'il n'existe plus dans la facture.
J'ai donc rajouter une règle associée à LigneFac au sein de laquelle du code SQL peut être saisi afin que
Looping l'intègre ensuite dans le LDD.
Je suis donc en quête d'une solution la plus simple et pédagogique possible pour nos jeunes étudiants avides de savoir (si, si, on peut rêver
), mais sans grande maîtrise de la bête SQL
?
Merci !
Partager