2010-03-03 6 views
1

Désolé pour ma question peu profonde.
Imaginez que j'ai 4 tables dans ma base de données (SQL Server 2005).
Image, Nouvelles, produit et galerie tableaux. À ma table d'image j'ai 3 clef étrangère aux 3 autres tables, et toutes les clefs étrangères sont nullables et la valeur par défaut = -1. Toutes les tables ont des clés primaires et sont des identités.
contrainte Problème/solution dans sqlServer

A mon chaque photo que formulaire en ligne i est liée à insérer un, deux ou trois autres tables.
exemple: il peut être associé à NewsId = 4, galleryId = 2 et non lié à Product Table. Donc ProductId = -1.
Je ne sais pas comment insérer photo et ne pas donner cette erreur « L'instruction INSERT en conflit avec la contrainte FOREIGN KEY « FK_Picture_Product » »
. Je sais pourquoi est-ce, et c'est à cause de forcer FOREIGN KEY contrainte. Mais je ne sais pas comment concevoir ma base de données afin de surmonter ce problème. J'espère que je pourrais le traverser. : En outre dans l'avenir je veux interroger ma table d'image selon des nouvelles, produit ou galerie ou mélangés d'entre eux.

+0

Merci à tous, j'ai eu mon erreur – Mostafa

Répondre

1

c'est parce que vous ne disposez d'aucun produit avec l'ID -1, vous devez définir la valeur par défaut à NULL et insérer la valeur null au lieu de -1

Lorsque vous créez une clé étrangère, le serveur sql vérifiez que la clé étrangère insérée existe dans la table référencée, dans le cas où elle n'existe pas, le RDMS refuse d'insérer la ligne.

+0

merci, Comment puis-je attribuer null aux touches étrangères, par exemple dans mon objet Picture j'ai: private int _productId; et il obtient automatiquement la valeur 0 si je n'attribue pas de valeur. – Mostafa

+0

vous pouvez le définir comme nulle: private int? Si vous travaillez avec C# http://msdn.microsoft.com/fr-fr/library/b3h38hb0.aspx _productID –

1

pourquoi utiliser -1 pour undefined? c'est ce que NULL est pour! supprime la valeur par défaut et permet à ces lignes d'avoir la valeur NULL lorsqu'il n'y a pas de ligne FK.

1

Pourquoi avez-vous une valeur par défaut de -1 pour vos clés étrangères? Lorsque vous insérez une nouvelle ligne qui ne remplit pas l'une des clés étrangères, la clé étrangère est définie sur -1, ce qui ne correspond pas à la clé d'une ligne dans la table étrangère.

Je n'ai normalement pas de valeur par défaut pour la clé étrangère et s'il n'y a pas de lien vers une ligne dans la table étrangère, alors la clé étrangère est nulle. Ceci est légal car vous avez défini toutes les clés étrangères comme nulles