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

EF4.1:Je možné mít vztah nula nebo jedna k nule nebo jedné (0..1 až 0..1)?

Ne, není to možné a pochybuji, že to funguje na SQL serveru. Databázový vztah vyžaduje, aby se jeden konec stal závislým. To znamená, že odkazuje na primární klíč (PK) hlavního konce - tento klíč nazýváme cizí klíč (FK). Pokud mluvíme o relaci jedna ku jedné, musí být FK označen jako jedinečný, aby se na daný záznam z hlavní tabulky mohl odkazovat pouze jeden záznam v závislé tabulce. Jediný platný vztah v tomto případě je 0..1 - 1, kde jistina může existovat bez závislé, ale závislá může existovat pouze ve vztahu k existující jistině, protože její hodnota FK musí být nastavena na hodnotu PK jistiny. Teoreticky může být FK nulovatelné, ale záleží na způsobu, jakým databáze implementuje jedinečná omezení. Pokud databáze počítá null jako další jedinečnou hodnotu, pouze jeden závislý záznam může mít FK nastaveno na null (myslím, že toto je případ SQL serveru).

V EF je to ještě komplikovanější, protože EF nepodporuje jedinečná omezení a díky tomu můžete vytvořit relaci jedna ku jedné pouze tehdy, když FK v závislé entitě je také její PK (=žádný způsob, jak ji nastavit na null). Pokud nemůžete nastavit FK na hodnotu null, nemůžete jej nastavit na hodnotu null a protože tato hlavní entita musí existovat, jinak referenční integrita vyvolá chybu.

Nejlepším řešením pro vás je zvážit Request jako hlavní entita a Result jako závislý. Požadavek musí být vytvořen jako první a musí být uchován v databázi tak dlouho jako Result . Result musí mít stejnou hodnotu PK (sloupec nelze automaticky zvýšit) jako odpovídající Request (a PK musí být FK pro Request ).



  1. Java/Mysql Jak byste vložili celý soubor SQL na server mysql?

  2. Zpracování EXCEPTION a návrat výsledku z funkce

  3. Jak se mohu připojit k databázi Oracle jako SYS pomocí připojovacího řetězce ADO?

  4. PHP/MySQL vložit řádek a získat 'id'