locked
contraintes SQL server (clé étrangère) RRS feed

  • Question

  • Bonjour à tous,

    je teste un schéma de base Oracle (opérationnel) sur SQL Server 2008 R2, mais j'ai des problèmes sur certaines relations:

    Exemple 1:

    TABLE critere (id PRIMARY KEY)

    TABLE produit (id PRIMARY KEY, id_critere FOREIGN KEY) avec ON UPDATE CASCADE ON DELETE NO ACTION

    TABLE entrepot (id PRIMARY KEY, id_critere FOREIGN KEY) avec ON UPDATE CASCADE ON DELETE NO ACTION

    TABLE fournisseur ((id PRIMARY KEY, id_critere FOREIGN KEY) avec ON UPDATE CASCADE ON DELETE NO ACTION

    mais une fois la première clé étrangère de la table produit (dans l'ordre) les deux autres crash

    MSG ERREUR

    Introducing FOREIGN KEY constraint 'fk_fournisseur_critere' on table 'fournisseur' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint.

    même message pour la table entrepot.

    Exemple 2: même chose pour cette config

    TABLE unite( id PRIMARY KEY)

    TABLE descripteur ( (id PRIMARY KEY, id_unite_br FOREIGN KEY, , id_unite_cd FOREIGN KEY) avec ON UPDATE CASCADE ON DELETE NO ACTION pour les deux clés


    Cordialement
    mardi 12 juillet 2011 14:44

Réponses

  • Merci Fred, effectivement il fallait que je mette ON UPDATE NO ACTION ON DELETE NO ACTION pour que le schéma soit valide.

    Maintenant, assurer l'intégrité référentielle avec des trigger n'est pas toujours évident mais je n'ai vraiment le choix.

    Merci encore.


    Cordialement
    • Marqué comme réponse IghzerA mercredi 13 juillet 2011 07:42
    mercredi 13 juillet 2011 07:41

Toutes les réponses

  • Bonjour,
     
    SQL Server ne sait pas gérer les références circulaires.
    La seule méthode que je connais est de spécifier NO ACTION sur l'une des
    références et d'implémenter un trigger pour assurer l'intégrité
    référentielle.
     
     

    Fred
    mardi 12 juillet 2011 15:59
  • Merci Fred, effectivement il fallait que je mette ON UPDATE NO ACTION ON DELETE NO ACTION pour que le schéma soit valide.

    Maintenant, assurer l'intégrité référentielle avec des trigger n'est pas toujours évident mais je n'ai vraiment le choix.

    Merci encore.


    Cordialement
    • Marqué comme réponse IghzerA mercredi 13 juillet 2011 07:42
    mercredi 13 juillet 2011 07:41