SQL Foreign Key

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
Configuration: Windows XP
Firefox 3.0.16

5 réponses

  1. 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
    1. 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
      1. 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
        1. 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
          1. 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