Třetí normální forma: Porovnání verzí
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]] |
'''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/}} |
|||
⚫ | |||
# 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]]. |
|||
⚫ | |||
* [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: 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
- Databáze a jazyk SQL – popis prvních čtyř normálních forem (česky)