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

Comment créer une véritable relation un à un dans SQL Server

Je suis presque sûr qu'il est techniquement impossible dans SQL Server d'avoir une véritable relation 1 à 1, car cela signifierait que vous auriez avoir pour insérer les deux enregistrements en même temps (sinon vous obtiendrez une erreur de contrainte lors de l'insertion), dans les deux tables, les deux tables ayant une relation de clé étrangère entre elles.

Cela étant dit, la conception de votre base de données décrite avec une clé étrangère est une relation de 1 à 0..1. Il n'y a pas de contrainte possible qui nécessiterait un enregistrement dans tableB. Vous pouvez avoir une pseudo-relation avec un déclencheur qui crée l'enregistrement dans tableB.

Il existe donc quelques pseudo-solutions

Tout d'abord, stockez toutes les données dans une seule table. Ensuite, vous n'aurez aucun problème dans EF.

Ou Deuxièmement, votre entité doit être suffisamment intelligente pour ne pas autoriser une insertion à moins qu'elle n'ait un enregistrement associé.

Ou troisièmement, et très probablement, vous avez un problème que vous essayez de résoudre et vous nous demandez pourquoi votre solution ne fonctionne pas au lieu du problème réel que vous essayez de résoudre (un problème XY).

MISE À JOUR

Expliquer en RÉALITÉ comment les relations 1 à 1 ne fonctionnent pas, j'utiliserai l'analogie du dilemme de la poule ou de l'œuf. Je n'ai pas l'intention de résoudre ce dilemme, mais si vous deviez avoir une contrainte qui dit que pour ajouter un œuf à la table des œufs, la relation du poulet doit exister et le poulet doit exister dans la table, alors vous ne pouviez pas ajouter un œuf à la table des œufs. L'inverse est également vrai. Vous ne pouvez pas ajouter un Poulet à la table Poulet sans que la relation à l'Oeuf et à l'Oeuf n'existe dans la table Oeuf. Ainsi, aucun enregistrement ne peut être créé dans une base de données sans enfreindre l'une des règles/contraintes.

nomenclature de la base de données d'une relation en tête-à-tête est trompeuse. Toutes les relations que j'ai vues (donc mon expérience) seraient plus descriptives comme des relations un à (zéro ou un).