1 Commande possède 1 seul client (obligatoire). Je ne dois avoir aucune commande sans client dans la bd.
1 client possède 1 ou plusieurs commandes. Je ne dois avoir aucun client sans commande dans la bd.
Autrement dit, les 2 cardinalité minimum sont à 1. Pour la commande, il suffit de mettre une contraite not null sur client_id. Mais comment faire pour le client qui doit forcément avoir une commande ?
Commande (id, date_cde, numero, etc...., client_id).
Client (id, nom, prenom, adresse,.....);
Avez-vous une idée comment implémenter cette contrainte pour que le client ait forcément au moins une commande?
J'ai bien pensé à un trigger before INSERT qui contrôlerait que le client ait bien une commande. Le trigger lève une erreur si le client n'a pas de commande. Mais comme le trigger agit après chaque INSERT (et non juste avant le commit), une erreur est tout le temps levée, car je dois commencer avec le client, sinon j'ai une erreur de foreign key non respectée. Une solution simple serait de mettre la cardinalité à 0, mais ici je n'ai pas le droit, je dois la laisser à 1.
Ce code n'est pas valable, car le client n'a aucune commande
INSERT INTO client (id, nom , prenom,....) VALUES (....);
COMMIT;
Ce code est valable, car le client a au moins 1 commande
INSERT INTO client (id, nom , prenom,....) VALUES (10, ....);
INSERT INTO commande (id, date_cde, numero, ..., client_id) VALUES (....,10);
INSERT INTO commande (id, date_cde, numero, ..., client_id) VALUES (....,10);
......
COMMIT;
Partager