-
Contraintes
Bonjour,
Sous oracle9i (OS Linux) je cherche à ajouter une contrainte a une table.
J'ai une colonne id_a dans ma table A, et 2 colonnes id_b et id_pere dans ma table B (qui donne des relations pere-fils). Lors d'une nouvelle insertion dans A, je veux tester une requete, par exemple savoir si l'id de A a un pere dans B, du type
Code:
exists(select * from B where id=(select id_pere from B where id=:new.id))
j'ai lu que sous oracle 9i on ne peut pas faire de requetes dans une contrainte check. De plus je ne vois pas comment utiliser une contrainte ref sans ajouter une colonne correspondant au père dans B.
Y a t-il une solution ?
N'hesitez pas à demander plus d'infos si je n'ai pas été claire
Merci d'avance
calypso
-
Les Foreigns keys sont faites pour ça a priori ;)
id doit alors être la PK de B et id_pere portera la FK ;)
-
c'est-à- dire ajouter une FK dans A ? (vu que c'est sur cette table que porte la contrainte)
Mais pour cela, je dois bien rajouter une colonne à A qui corresponde à l'id_pere non?
merci !
-
je ne comprends pas le rapport en A et B :?
-
ex:
table A:
id (clé)
--------
toto
albert
jean
table B
id (clé) id_pere
-----------------------
toto Mr. dupont
albert jean
jean Mr. dupont
guillaume toto
-> je veux ajouter guillaume dans A. il existe deja une contrainte verifiant que guillaume existe dans B.
-> je cherche à faire une contrainte qui teste si le père de guillaume (soit toto, et je sais qu'il existe) est dans A. Le but est de ne pouvoir insérer guillaume dans A que si toto est déjà présent...
-
la clé des 2 tables est le prénom ? 8O
-
j'ai simplifié :)
En réalité, la table A a 2 colonnes qui constituent la clé. (c'est une relation entre la table B et une autre table).
La table B à en effet le prénom comme clé.
Et les identifiants ne sont pqs des prénoms mais des chiffres. Disons que c plus simple d'utiliser toto :)
calypso
-
Evite la simplification parce que je n'arrive vraiment pas à saisir :oops:
La solution sera de toutes façon soit dans une FK soit dans un trigger :?
-
Bonjour,
d'apres ton exemple simplifié (peut etre un peu trop)
PK sur B.id(cle) et FK sur A.id(cle) referençant B.id (cle).
Avec la contrainte de FK tu ne pourra inserrer dans A que des id existant dans B