sql >> Databáze >  >> RDS >> Sqlserver

Jak vytvořit skutečný vztah jeden k jednomu na serveru SQL Server

Jsem si docela jistý, že na serveru SQL je technicky nemožné mít vztah True 1 to 1, protože by to znamenalo, že byste měli vložit oba záznamy současně (jinak byste dostali chybu omezení při vkládání) do obou tabulek, přičemž obě tabulky mají vzájemný vztah cizího klíče.

Jak již bylo řečeno, váš návrh databáze popsaný s cizím klíčem je vztah 1 až 0..1. Není možné žádné omezení, které by vyžadovalo záznam v tabulce B. Můžete mít pseudovztah se spouštěčem, který vytvoří záznam v tabulce B.

Existuje tedy několik pseudořešení

Nejprve uložte všechna data do jedné tabulky. Pak nebudete mít v EF žádné problémy.

Nebo Za druhé, vaše entita musí být dostatečně chytrá, aby nepovolila vložení, pokud nemá přidružený záznam.

Nebo za třetí, a s největší pravděpodobností máte problém, který se snažíte vyřešit, a ptáte se nás, proč vaše řešení nefunguje, místo skutečného problému, který se snažíte vyřešit (problém XY).

AKTUALIZACE

Vysvětlení v REALITY jak nefungují vztahy 1:1, použiji přirovnání k dilematu Kuře nebo vejce. Nemám v úmyslu toto dilema řešit, ale pokud byste měli mít omezení, které říká, že chcete-li přidat vejce do tabulky vajec, vztah kuře musí existovat a kuře musí existovat v tabulce, pak nemohli jste přidat vejce do tabulky vajec. Platí to i naopak. Kuře nemůžete přidat do tabulky Kuře, aniž by v tabulce Vejce existoval vztah k Vejci i Vejci. Nelze tedy vytvářet žádné záznamy v databázi bez porušení jednoho z pravidel/omezení.

Databáze názvosloví vztahu jeden k jednomu je zavádějící. Všechny vztahy, které jsem viděl (tedy moje zkušenost), by byly popisnější jako vztahy jedna ku (nula nebo jedna).



  1. Drag and Drop v MS Access a podmíněné třídění

  2. Konfigurace replikace heterogenní databáze – SQL Server na Oracle

  3. Oracle 12cR2 nyní v beta verzi

  4. Platné kontroly data v Oracle