Jak rozložit tento vztah na vztahy 3NF?

Dnes jsem četl o algoritmu rozkladu 3NF. Bylo tam uvedeno:

  1. Najděte minimální základ F, řekněte G
  2. Pro každý FD X → A v G, použijte {X, A} jako schéma jedné ze relací při rozkladu
  3. Pokud žádná ze sad relací z kroku 2 není superklíčem pro R, přidejte další relaci, jejíž schéma je klíčem pro R

Chci tento vztah rozložit na 3NF.

R(A,B,C) S={A→B, A→C, B→A, B→C, C→A, C→ B, AB→ C, BC→A, AC→B, A→BC, B→AC, C→AB} 

Jak vidíme, klíčem R je: {A},{B},{C}

S má několik minimálních základů, například:

  1. {A→B, B→A, B→C, C→B}; a
  2. {A→B, B→C, C→A}

Problém je v tom, že pokud použijeme 1. minimální základnu, rozložíme R na 2 vztahy : (A, B), (B, C).

Pokud použijeme 2. minimální základnu, R se změní na: (A, B), (B, C), (C, A).

Moje otázka zní: který je správný?

Odpověď

Nejprve si povšimněte, že původní vztah je již ve třetí normální formě, protože každý atribut je primární (každý atribut je vlastně klíč), takže je respektována definice 3NF.

Pak si všimněte, že algoritmus je neúplný. Kroky jsou:

  1. Najděte minimální základ F, řekněme G
  2. Pro každou skupinu FD se stejným levá část, X → A 1 , X → A 2 , …, X → A n v G, použijte {X, A 1 , A 2 , …, A n } jako schéma jednoho ze vztahů v rozkladu
  3. Odstraňte všechny relace, jejichž atributy jsou obsaženy v jiné relaci.
  4. Pokud žádná ze sad relací z kroku 2 není superklíčem pro R, přidejte další relaci, jejíž schéma je klíčem pro R.

Takže v prvním případě získáte tři skupiny závislostí:

A → B B → A B → C C → B 

, které vytvářejí tři vztahy, R 1 (A, B), R 2 (A, B, C), R 3 (B, C) a podle algoritmu získáte jako výsledek pouze R 2 , protože ostatní dva mají v sobě obsažené atributy.

Takže máte dva různé výstupy z algoritmu, v závislosti na použité minimální základně (což zase závisí na pořadí, ve kterém při výpočtu minimální krytí berete v úvahu závislosti.

Takže odpověď na vaši otázku:

which jeden je správný?

je: oba jsou správné , protože oba splňují definici 3NF. Jednoduše jste zjistili, že syntézní algoritmus pro rozložení relace ve 3NF může přinést různá řešení.

Jiná otázka zní: což je „lepší“ a samozřejmě řešení s jedinou relací je „lepší“ , protože při zadávání dotazů se nemusíte připojovat k tabulkám.

Samozřejmě, pokud by člověk mohl na začátku zkontrolovat, zda je relace již v 3NF, pak by se algoritmu mohl vyhnout. To ale obecně nelze provést, protože kontrola vyžaduje exponenciální výpočet všech klíčů, aby bylo možné najít hlavní atributy relace.

Komentáře

  • Děkujeme za odpověď! Jak jste ale vytvořili 3 vztahy: R1 (A, B), R2 (A, B, C), R3 (B, C)? Myslel jsem, že má pouze R1 a R3. R2 je původní vztah.
  • Pro druhý krok správného algoritmu existují dvě závislosti se stejnou levou částí, B → A a B → C, takže byste měli dát všechny atributy dohromady a získat vztah (A, B, C). Je to diktováno algoritmem.
  • Páni, o tomto 2. kroku jsem nevěděl '. Vzal jsem algoritmus z knihy s názvem A First Course in Database System - 3rd edition. Který mám nyní použít?
  • Tento algoritmus není úplný. Všechny hlavní knihy o databázích mají algoritmus, který jsem popsal v odpovědi.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *