SQL Foreign Key

Fermé
osiris89 Messages postés 8 Date d'inscription vendredi 18 décembre 2009 Statut Membre Dernière intervention 24 mars 2010 - 18 déc. 2009 à 17:42
Mopra-L Messages postés 146 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 23 mai 2012 - 18 déc. 2009 à 20:34
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
A voir également:

5 réponses

Mopra-L Messages postés 146 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 23 mai 2012 6
18 déc. 2009 à 17:45
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 Date d'inscription vendredi 18 décembre 2009 Statut Membre Dernière intervention 24 mars 2010
18 déc. 2009 à 17:53
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 146 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 23 mai 2012 6
18 déc. 2009 à 18:05
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 Date d'inscription vendredi 18 décembre 2009 Statut Membre Dernière intervention 24 mars 2010
18 déc. 2009 à 19:47
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 146 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 23 mai 2012 6
18 déc. 2009 à 20:34
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