Et bien voilà une belle occasion de briller.
v10ware a écrit :
Et je ne sais pas du tout si un SELECT dans un CHECK est faisable... Enfin je peux tenter.
|
Un exemple pris au hasard (c'est du Sybase mais ça s'applique mutatis mutandis à d'autres DBMS) :
Code :
- create trigger forinsertrig1
- on salesdetail
- for insert
- as
- if (select count(*)
- from titles, inserted
- where titles.title_id = inserted.title_id) !=
- @@rowcount
- /* Cancel the insert and print a message.*/
- begin
- rollback transaction
- print "No, the title_id does not exist in
- titles."
- end
- /* Otherwise, allow it. */
- else
- print "Added! All title_id's exist in titles."
|
Ca devrait aller, non ?
v10ware a écrit :
Je vais peut-être gérer cette contrainte dans l'appli qui chapeaute la base si il n'y a pas de moyen simple d'écrire ça simplement, de toute façon.
|
L'idéal est de faire les deux - et d'expliquer pq à tes profs. Ceci dit, contrairement à ce qu'on apprend à l'école, il existe des DB sans aucune contrainte d'intégrité (pas de relations entre tables, que dalle), mais ce n'est pas très didactique, on va dire.
Bon, si c'est pour un cours de DB, tu serais sans doute mieux inspiré de travailler au niveau DB et de pondre un beau trigger bien robuste.
---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}