SQL Foreign Key

osiris89 Messages postés 8 Statut Membre -  
Mopra-L Messages postés 150 Statut Membre -
Bonjour,

Je suis entrain de finaliser une application faite en PHP, HTML, Javascript, AJAX, CSS et finalement SQL. Ces derniers mois, tout allait si bien sauf une seule chose ce matin.

Je finalise la base de données en faisant les ALTER TABLE pour les FOREIGN KEY et j'ai un problème pour ces dernières qui sont optionnelles.
Lorsque la FOREIGN KEY n'est pas obligatoire, je n'arrive pas à faire le ALTER TABLE pour cette situation là.
Le champ doit absolument avoir une valeur pour que les requêtes d'ajout et de modif fonctionne.

Est-ce que c'est possible et est-ce que quelqu'un peut m'aider ?
Je n'ai rien trouvé sur Internet.

Merci à tous

5 réponses

Mopra-L Messages postés 150 Statut Membre 6
 
Bonjour,

Je serais tenté de dire que c'est un peu le principe des FOREIGN KEY, elles doivent correspondre forcement a quelque chose :/

Si tu veux mettre ce champ optionnel tout en verifiant que la clé existe, je te conseille plutôt les triggers
0
osiris89 Messages postés 8 Statut Membre
 
Merci à toi pour la réponse si rapide,

Aurais-tu un exemple de triggers qui ferait un peu ce que j'ai de besoin ?

Merci
0
Mopra-L Messages postés 150 Statut Membre 6
 
Hem, la, par contre, non ^^'

Ce n'est pas trop compliqué a faire, voila déjà le début :

CREATE OR REPLACE TRIGGER verif_foreign_key
BEFORE INSERT OR UPDATE ON ta_table

FOR EACH ROW

SELECT * FROM table_de_la_cle_referante WHERE cle_referante = new.ta_foreign_key

Voila, après, faut vérifier si le select rammene des résultats, et si c'est pas le cas, y a pas de correspondance, donc faut générer une erreur

Désolé de pas pouvoir t'aider plus, les triggers sont un peu loin dans ma mémoire, je m'en souviens plus trop ^^'
0
osiris89 Messages postés 8 Statut Membre
 
Merci de ton aide, mais je n'arrive pas à trouver de l'aide pour compléter le trigger.
Je ne m'y connait pas du tout en trigger ... est-ce que tu as un site ou quelque chose qui pourrait m'aider ?

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mopra-L Messages postés 150 Statut Membre 6
 
J'ai retrouvé mes cours, je vais peut-être pouvoir t'aider :D

CREATE OR REPLACE TRIGGER verif_foreign_key
BEFORE INSERT OR UPDATE ON ta_table_avec_foreign_key
for each row
DECLARE
cnt NUMBER;
begin

SELECT count(*) into cnt
FROM table_de_la_cle_referante
WHERE cle_referante = :new.ta_foreign_key

if (cnt = 0) then
raise_application_error(-20100,'Cette valeur n'existe pas !');
end if;
end;

Voila, je ne peux evidemment pas la tester, mais ca devrait fonctionner, j'imagine :p
0