Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

EF4.1 :Possible d'avoir une relation zéro-ou-un à zéro-ou-un (0..1 à 0..1) ?

Non, ce n'est pas possible et je doute que cela fonctionne dans SQL Server. La relation de base de données nécessite qu'une extrémité devienne dépendante. Cela signifie qu'il fait référence à la clé primaire (PK) d'une extrémité principale - nous appelons cette clé étrangère (FK). Si nous parlons de relation un à un, le FK doit être marqué comme unique afin qu'un seul enregistrement de la table dépendante puisse référencer un enregistrement donné de la table principale. La seule relation valide dans ce cas est 0..1 - 1 où le principal peut exister sans personne à charge, mais la personne à charge ne peut exister que lorsqu'elle est liée à un principal existant car sa valeur FK doit être définie sur la valeur PK du principal. Théoriquement, FK peut être nullable, mais cela dépend de la manière dont la base de données implémente les contraintes uniques. Si la base de données compte null comme une autre valeur unique, un seul enregistrement dépendant peut avoir FK défini sur null (je pense que c'est un cas de serveur SQL).

Dans EF, c'est encore plus compliqué car EF ne prend pas en charge les contraintes uniques et à cause de cela, vous ne pouvez créer une relation un à un que lorsque FK dans l'entité dépendante est également son PK (=aucun moyen de le définir sur null). Si vous ne pouvez pas définir FK sur null, vous ne pouvez pas l'avoir nullable et à cause de cette entité principale doit exister sinon l'intégrité référentielle générera une erreur.

La meilleure solution pour vous est d'envisager Request comme entité principale et Result comme dépendant. La requête doit être créée en premier et elle doit être conservée dans la base de données tant que le Result . Result doit avoir la même valeur PK (la colonne ne peut pas être incrémentée automatiquement) que la Request correspondante (et PK doit être FK pour Request ).