Notace vraní nohy
Dva symboly na každém konci čáry a společně zakódují každou kardinalitu, jakou relační databáze dokáže vynutit. Celá notace se vejde do odstavce; otočit konce správným směrem trvá o něco déle.
8 min čteníER - crow's foot2 z 3
Krátká odpověď
- Dva symboly na konec: vnitřní je minimum (kroužek nula, čárka jeden), vnější je maximum (čárka jeden, vraní noha mnoho).
- Symboly stojí na jednom konci a omezují ten konec, ale čtete je z druhého. Přečíst je obráceně je nejčastější chyba u vraní nohy.
- Plná čára je identifikující vztah - klíč rodiče je částí klíče dítěte. Přerušovaná znamená, že cizí klíč je obyčejný atribut.
- Relační databáze neumí uložit mnoho k mnoha. Každá taková čára ponechaná v logickém modelu je poznámkou, že vazební tabulka ještě chybí.
01Tři symboly, čtyři kombinace#
Vraní noha - správně notace Information Engineering - klade na každý konec čáry vztahu dvě značky. Ta dál od entity je maximum a ta blíž k entitě je minimum.
| Prvek | Notace | Co znamená |
|---|---|---|
| Čárka | jeden tah napříč čarou | Jeden. Jako vnější značka znamená „nejvýš jeden“; jako vnitřní „alespoň jeden“. |
| Vraní noha | tři hroty | Mnoho. Vždy jen vnější značka - maximum bez stropu. |
| Kroužek | malý kroužek | Nula. Vždy jen vnitřní značka - vztah je nepovinný. |
Zkombinujte je a možností jsou přesně čtyři, a to je celá notace:
| Prvek | Notace | Co znamená |
|---|---|---|
| Právě jeden | Čárka a čárka. Povinné, jednotlivé. | |
| Nula nebo jeden | Kroužek a pak čárka. Nepovinné, jednotlivé. | |
| Jeden nebo více | Čárka a pak vraní noha. Povinné, vícenásobné. | |
| Nula nebo více | Kroužek a pak vraní noha. Nepovinné, vícenásobné. |
02Který konec symbol popisuje#
Tohle je jediná věc na vraní noze, která je opravdu proti intuici, a odpovídá za většinu špatně přečtených diagramů. Symboly na konci popisují entitu na tom konci a čtete je, když cestujete k té entitě.
Na čtvrté čáře diagramu výše je vraní noha na konci u Order. Neznamená to „mnoho zákazníků“. Znamená to: pro jednoho zákazníka je nula nebo více objednávek. Řekněte to jako cestu - „začínám u zákazníka, jdu po čáře a dorazím k nule nebo více objednávkám“ - a směr přestane být dvojznačný.
Praktický návyk, který problém odstraní úplně: napište na čáru slovesnou frázi ve směru, v jakém se čte zleva doprava, a než půjdete dál, přečtěte nahlas opačné čtení. Třicet sekund na vztah - a zachytí to chyby, které v dokumentu přežijí měsíce.
03Identifikující a neidentifikující#
Styl čáry nese druhou informaci a je o klíčích, ne o počtech.
| Prvek | Notace | Co znamená |
|---|---|---|
| Neidentifikující | Přerušovaná. Potomek má vlastní primární klíč a na rodiče drží jen cizí klíč. Order má order_id a zvlášť si zaznamenává, kterému zákazníkovi patří. Běžný případ. | |
| Identifikující | Plná. Klíč rodiče je součástí primárního klíče potomka, takže potomek bez něj nemůže existovat ani být identifikován. Slabá entita. |
Testem je jedna otázka: šel by tenhle řádek identifikovat bez znalosti jeho rodiče? Položka objednávky číslo 3 nedává smysl, aniž bychom věděli, které objednávky - to je identifikující. Objednávka patřící zákazníkovi 41 je pořád objednávka 8817 bez ohledu na to - to je neidentifikující.
04Jak vyřešit vztah M:N#
Vraní noha na obou koncích říká „mnoho k mnoha“ a žádná relační databáze to ve dvou tabulkách neuloží. Vztah se stane samostatnou entitou - vazební, asociační nebo spojovací - která drží cizí klíč na každou stranu.
Z toho plynou dvě věci a ta druhá je důvodem, proč se to vyplatí udělat brzy a ne až při implementaci:
- Vazební entita má obvykle vlastní atributy. Zápis má datum, známku, stav. Ty atributy neměly kde bydlet, dokud byl vztah čarou, a jejich absence skrývala mezeru v modelu.
- Vazební entita si zaslouží skutečný název.
Enrolment,Booking,Assignment- neStudentCourse. Doménový expert první zná a druhý nedokáže revidovat, a ten název bývá slovem, které byznys už používá.
Všimněte si klíčů ve vazební entitě výše: oba cizí klíče dohromady tvoří primární klíč, a právě to zabrání tomu, aby se tentýž student zapsal na tentýž kurz dvakrát. To omezení přišlo zdarma z pořádného namodelování a jinak by bylo validací, na kterou si někdo vzpomněl.
05Proti alternativám#
| Prvek | Notace | Co znamená |
|---|---|---|
| Chenova notace | kosočtverce a ovály | Původní. Vztahy jsou kosočtverce a atributy ovály visící z entit, což je výrazné a zabere čtyřnásobek místa. Běžná při výuce, v praxi vzácná. |
| Násobnost UML | 0..1, 1..* | Čísla napsaná na koncích čar místo symbolů. Přesnější - umí říct 2..5 - a pomalejší na přelétnutí očima přes stěnu plnou tabulek. |
| IDEF1X | vyplněné kroužky | Federální standard USA, blízký vraní noze s jinými symboly a přísnějšími pravidly o identifikujících vztazích. Potkáte ho ve státní správě a obraně. |
| Vraní noha | Kompaktní, čitelná i z dálky a rozumí jí každý databázový nástroj. Výchozí volba z dobrých důvodů. |
Sáhněte po něm, když
- Jakýkoli diagram s víc než zhruba šesti entitami - zůstane čitelný
- Publikum, ve kterém jsou i DBA a datoví inženýři
- Model, ze kterého bude DDL, kde ty čtyři případy přesně sednou na omezení
- Práci u tabule, protože symboly přežijí i špatné nakreslení
Sáhněte po něčem jiném, když
- Potřebujete mez typu „mezi dvěma a pěti“ - použijte násobnost UML
- Publikem je softwarový tým žijící v UML a modelem jsou doménové třídy
- Výuku prvních principů, kde Chenovy kosočtverce dělají vztah viditelným
- Ternární vztah, který vraní noha bez vazební entity nenakreslí
Nic z toho se nevylučuje. Spousta reálných projektů kreslí vraní nohu pro databázi a diagram tříd pro doménový model a drží obojí, protože odpovídají na jiné otázky o týchž podstatných jménech.
06Časté chyby#
- Symboly na špatném konci. Nejčastější chyba v téhle notaci. Přečtěte obě věty nahlas.
- Všechno nepovinné. Kroužek na každé vnitřní pozici znamená, že model netvrdí žádná pravidla - a každé z nich se místo toho stane aplikačním kódem.
- Vztah M:N ponechaný v logickém modelu. Konceptuálně v pořádku, fyzicky nemožné. Vyřešte ho a vazební entitu pojmenujte.
- Vazební entity pojmenované zřetězením.
OrderProductrecenzentovi neřekne nic;OrderLinemu řekne všechno. - Spoléhání jen na styl čáry u identifikujících vztahů. Nástroje se neshodnou. Ukažte složený klíč i v boxu.
- Neoznačené vztahy. Sloveso je to, co dělá čáru čitelnou nahlas - a čtení nahlas je tou revizí.
Když je kardinalita vyřešená, další otázkou je, jaké tabulky vlastně mají být - a to je návrh schématu: klíče, normalizace a cesta od modelu k DDL.
Po jednom řádku na každé
- 01Vnější symbol je maximum, vnitřní symbol je minimum.
- 02Čárka je jeden, vraní noha je mnoho, kroužek je nula.
- 03Symboly popisují entitu na svém vlastním konci - čtěte směrem k ní.
- 04Každý vztah má dvě pravdivé věty; ověřte obě.
- 05Plná čára znamená, že klíč rodiče je součástí klíče potomka; přerušovaná, že není.
- 06Vztah M:N se stane pojmenovanou vazební entitou, obvykle s vlastními atributy.
07Časté dotazy#
Co znamenají symboly vraní nohy?
Na každém konci čáry jsou dva symboly. Vnitřní je minimum: kroužek pro nulu, tedy volitelné, nebo čárka pro jeden, tedy povinné. Vnější je maximum: čárka pro jeden, nebo tříprstá vraní noha pro mnoho. Společně dávají nula nebo jeden, právě jeden, nula nebo více, jeden nebo více.
Na který konec čáry se symbol vraní nohy vztahuje?
Symboly stojí na jednom konci a omezují entitu na tom konci, ale čtete je z druhého. Vraní noha vedle Objednávky ve vztahu Zákazník - Objednávka znamená, že jeden zákazník má mnoho objednávek. Přečíst to obráceně je nejčastější chyba u vraní nohy.
Jaký je rozdíl mezi identifikujícím a neidentifikujícím vztahem?
V identifikujícím vztahu nemůže dítě existovat bez rodiče a klíč rodiče tvoří část klíče dítěte, kreslí se plnou čarou. V neidentifikujícím vztahu je cizí klíč obyčejným atributem a dítě stojí samostatně, kreslí se přerušovanou čarou.
Jak se řeší vztah mnoho k mnoha?
Rozložte ho na vazební tabulku: třetí entitu s cizím klíčem na každou stranu. Relační databáze neumí mnoho k mnoha uložit přímo, takže každá taková čára ponechaná v logickém modelu je poznámkou, že jedna tabulka ještě chybí.
Jak se vraní noha srovnává s násobností v UML?
Vyjadřují tatáž omezení jinou syntaxí. UML píše rozsah jako text na konci asociace, například 0..1 nebo 1..*, zatímco vraní noha ho kreslí jako dvojici symbolů. UML také umisťuje násobnost na opačný konec, než kde ji čtenář vraní nohy čeká, což se vyplatí zkontrolovat při přechodu mezi nimi.
V této sérii
- 01ER diagramy
- 02Notace vraní nohy
- 03Návrh schématu
Související články
Základy
Praxe modelování
Diagramy struktury
Přehled notace