Třetí normální forma: Porovnání verzí

Z Wikipedie, otevřené encyklopedie
Smazaný obsah Přidaný obsah
m editace uživatele 213.194.221.201 (diskuse) vráceny do předchozího stavu, jehož autorem je JAnDbot
značky: rychlé vrácení zpět editace z mobilu editace z mobilního webu pokročilá editace z mobilního zařízení
copyvio, do šabl. Upravit - původní učebnicová forma "rozhovoru" nevhodná
Řádek 1: Řádek 1:
{{Upravit|poznámky=encyklopedický styl}}
{{Upravit|poznámky=encyklopedický styl (nahradit formu "rozhovoru" se studentem)}}


'''Třetí normální forma''' ('''3NF''') je soubor doporučení (metodika) pro návrh datové struktury [[databáze]], jehož dodržení vede k optimálnímu využití vlastností systému [[OLTP]] při tvorbě databázových aplikací. 3NF obsahuje jako svou podmnožinu [[druhá normální forma|druhou normální formu]] (2NF) a [[první normální forma|první normální formu]] (1NF):
'''Třetí normální forma''' ('''3NF''') je soubor doporučení (metodika) pro návrh datové struktury [[databáze]].
{{Copyvio|zdroj= http://referaty-seminarky.cz/treti-normalni-forma/}}
== Externí odkazy ==


# Eliminuj duplicitní sloupce v jednotlivých tabulkách.
# Pro každou skupinu dat s jasně vymezeným významem vytvoř zvláštní tabulku, každý řádek opatři unikátním [[Primární klíč|primárním klíčem]].
# Obsahem jednotlivých sloupců tabulky by měla být jednoduchá, dále nedělitelná informace.
# Podmnožinu dat se shodnou hodnotou pro určitý sloupec tabulky převeď do samostatné tabulky a spoj s původní tabulkou [[Cizí klíč|cizím klíčem]].
# Odstraň z tabulky sloupce, které jsou přímo závislé na jiné skupině sloupců tabulky než pouze na [[Primární klíč|primárním klíči]].

Tak, jak jsou zde zapsány, působí jednotlivá doporučení velice obecně a (alespoň pro toho, kdo již někdy nějakou databázovou strukturu navrhoval) v podstatě samozřejmě.
Pokusme se demonstrovat jejich použití na jednoduchém příkladu:

== Příklad ==
Zadání: Navrhněte datovou strukturu (tabulku nebo skupinu tabulek) pro uložení seznamu oddělení firmy, který bude obsahovat číslo oddělení, adresu budovy, kde oddělení sídlí, jméno, příjmení a plat šéfa a jméno, příjmení a plat všech zaměstnanců oddělení.

=== První pokus o řešení ===
Vytvořím si jednu tabulku '''Oddělení''', která bude obsahovat následující sloupce:
* číslo oddělení
* adresa budovy
* jméno, příjmení a plat šéfa
* jméno, příjmení a plat prvního zaměstnance
* jméno, příjmení a plat druhého zaměstnance
* jméno, příjmení a plat třetího zaměstnance
* … a tak dále podle toho, kolik má zaměstnanců největší oddělení ve firmě

Moc hezké, ale zkuste v této struktuře napsat příkaz [[SELECT]], který vybere deset nejlépe placených zaměstnanců. Nebo třeba [[SELECT]], který vybere oddělení s více než deseti zaměstnanci.<br />
Tato struktura rozhodně nesplňuje bod 3 z výše uvedených doporučení – adresa by měla být rozdělena na ulici, město, PSČ a stát a pro každého zaměstnance by mělo být uvedeno zvlášť jméno, zvlášť příjmení a zvlášť plat.<br />
Tato struktura také rozhodně nesplňuje bod 2 – jsou zde dohromady v jedné tabulce smíchány údaje o lidech a o odděleních.<br />

=== Druhý pokus o řešení ===
Vytvořím dvě tabulky:

Tabulka '''Oddělení''':
* číslo oddělení ([[primární klíč]])
* adresa budovy – ulice
* adresa budovy – číslo
* adresa budovy – město
* adresa budovy – PSČ
* adresa budovy – stát
* ID šéfa ([[cizí klíč]] do tabulky Lidé)

Tabulka '''Lidé''':
* ID člověka ([[primární klíč]] – uměle vytvořené zaměstnanecké číslo, žádný z existujících sloupců ani jejich skupinu nemohu použít jako primární klíč, neboť ve firmě mohou existovat dva Josefové Novákové pracující ve stejném oddělení za stejný plat)
* jméno
* příjmení
* plat
* číslo oddělení ([[cizí klíč]] do tabulky Oddělení)

Už je to o něco lepší – rozhodně už dokážu pomocí [[SQL]] příkazu najít nejlépe placené zaměstnance nebo zjistit počet zaměstnanců jednotlivých oddělení. Problém je ještě v doporučení číslo 4 v případě tabulky Oddělení – firma bude nejspíš mít hodně oddělení, ale málo budov (možná dokonce jenom jednu), rozhodně bude hodně oddělení sedět vždy ve stejné budově. V tabulce Oddělení se mi tedy bude pořád dokola opakovat několik málo adres budov. Správně by tedy měly být adresové sloupce vyvedeny do zvláštní tabulky.

=== Třetí pokus o řešení ===
Vytvořím tři tabulky:

Tabulka '''Oddělení''':
* číslo oddělení ([[primární klíč]])
* ID šéfa ([[cizí klíč]] do tabulky Lidé)
* ID budovy ([[cizí klíč]] do tabulky Budovy)

Tabulka '''Lidé''':
* ID člověka ([[primární klíč]])
* jméno
* příjmení
* plat
* číslo oddělení ([[cizí klíč]] do tabulky Oddělení)

Tabulka '''Budovy''':
* ID budovy ([[primární klíč]] – uměle vytvořené pořadové číslo budovy)
* adresa budovy – ulice
* adresa budovy – číslo
* adresa budovy – město
* adresa budovy – PSČ
* adresa budovy – stát

To už vypadá docela dobře. Dalo by se diskutovat o tom, jestli ''číslo oddělení'' je opravdu vhodný [[primární klíč]], co se stane, když dojde k přečíslování oddělení, nebo třeba o tom, že podle PSČ a státu dokážu určit město, takže podle doporučení 5 je položka ''adresa budovy – město'' vlastně přebytečná, ale v zásadě jsme se díky pravidlům '''3NF''' dostali ke struktuře, se kterou by nemělo být složité pracovat pomocí příkazů jazyka [[SQL]].

== Externí odkazy ==
* [http://interval.cz/clanky/databaze-a-jazyk-sql/ Databáze a jazyk SQL] – popis prvních čtyř normálních forem (česky)
* [http://interval.cz/clanky/databaze-a-jazyk-sql/ Databáze a jazyk SQL] – popis prvních čtyř normálních forem (česky)



Verze z 30. 5. 2023, 09:09

Třetí normální forma (3NF) je soubor doporučení (metodika) pro návrh datové struktury databáze.

MOŽNÉ PORUŠENÍ AUTORSKÝCH PRÁV

©

Obsah této stránky (nebo jeho část) byl skryt kvůli podezření z porušení autorských práv. Text, který sem byl vložen, se nápadně podobá textu z:

http://referaty-seminarky.cz/treti-normalni-forma/
Tato stránka je proto nyní zapsána na Wikipedie:Porušení práv. Samotná podoba textu nutně neznamená, že k porušení práv skutečně došlo, ale aby text mohl ve Wikipedii zůstat, je třeba ověřit jeho původ. Pokud se nepodaří původ textu ověřit, bude článek či příslušná část po týdnu smazána.

Pokud jste autorem materiálu a souhlasíte s podmínkami naší licence CC BY-SA 3.0, pošlete prosím souhlas e-mailem dle pokynů na Nápověda:Svolení autora nebo na internetové stránce, ze které text pochází, uveďte jeho licencování dle CC BY-SA 3.0.

Neobnovujte bez vysvětlení odstraněný text. Takový text by byl opět odstraněn.

Vkládáním autorských děl do Wikipedie bez výslovného souhlasu autora nebo držitele práv k šíření pod licencí CC BY-SA 3.0 porušujete zákon a pravidla Wikipedie. Uživatelům, kteří opakovaně porušují tato pravidla, může být dočasně zakázáno editovat články. Uvítáme však vaše původní příspěvky.
Pro vkladatele šablony:
Najděte autora a vložte mu na diskusní stránku:
{{subst:copyvio autor|Třetí normální forma|2=http://referaty-seminarky.cz/treti-normalni-forma/}} --~~~~
případně použijte pro nové přispěvatele:
{{subst:copyvio nováček|Třetí normální forma|2=http://referaty-seminarky.cz/treti-normalni-forma/}} --~~~~
a vložte sem:
* [[Třetí normální forma]] z [http://referaty-seminarky.cz/treti-normalni-forma/] --~~~~
Pro správce:
Pokud se tento článek potvrdí jako porušení autorských práv nebo do sedmi dnů nedojde k potvrzení jeho licence, smažte ho


Externí odkazy