Pakliže se někdy dostanete k návrhu databáze v MySQL a budete k tomu používat nástroj MySQL Workbench, možná vás napadne při návrhu relací stejná otázka jako mě: “Jaký je sakra rozdíl mezi non-identifying a identifying relací?” Při výběru typu relace totiž jak u 1:1, tak u 1:n, je tato možnost volby.
Upřímně, dosud mě nenapadá ani český ekvivalent, jak tyto relace označit. Samozřejmě, šlo by je nazvat jako identifikující a neidentifikující relace, ale informačně mi to pořád moc neřekne.
Každopádně, pidíl jsem se po odpovědi, jaký je vlastně rozdíl a proto jsem vytvořil tento příklad:
Příklad vysvětluje problematiku na ukázce dvou relací typu 1:1, kde jedna z nich je identifikující a druhá neidentifikující (zvolené označení se mi moc nelíbí, kdyby měl někdo lepší, budu rád za feedback:)).
V prvním případě můžeme vidět, že máme tabulku osob a tabulku států. To, že je relace nedientifikující, jednoduše znamená, že záznam v přidružené tabulce není “silně” spojen se záznamem rodičovské tabulky. Z jiné strany, pokud bude osoba smazána, nijak to neovlivní přidruženou tabulku. Stát tedy může existovat i bez osoby.
V druhém příkladě, který naopak reprezentuje identifikující relaci, je situace naprosto jiná. Zde jsou záznamy v přidružené tabulce silně spojeny se záznamy rodičovské tabulky, přičemž primární klíč přidružené tabulky je součástí primárního klíče rodičovské tabulky. Jednoduše řečeno, účet nemůže existovat bez osoby.
Přídavek na závěr
Z mého pohledu se skutečně nejedná o žádnou magii. Na závěř přidám ještě dva příklady.
Kniha patří nějakému vlastníkovi a vlastník může vlastnit i několik knih. Ale kniha může existovat i bez vlastníka a může ho také změnit. Relace mezi vlastníkem a knihou je v tomto případě neidentifikující.
Avšak, kniha je napsána nějakým autorem a ten autor mohl napsat i několik knih. Kniha ale musí být někým napsána a nemůže existovat bez nějakého autora. Tudíž je tato relace mezi knihou a autorem identifikující.