Co je to vztah jedna ku jedné v datovém modelování? Jak implementujete tento vztah v databázi? Na tyto otázky odpoví příklady v tomto článku.
V datovém modelování existují tři typy vztahů mezi entitami (tabulkami):
- Vztahy jedna k mnoha (označované také jako 1:M).
- Vztahy mnoho k mnoha (M:N).
- Vztahy jedna ku jedné (1:1).
Nejběžnějším typem vztahu je vztah jeden k mnoha, kde na záznam v jedné entitě může odkazovat více záznamů v jiné entitě. Dalším běžným typem je vztah mnoho k mnoha. Tento typ vztahu se používá pouze v logických datových modelech. Ve fyzické databázi musí být implementována pomocí vztahů jedna k mnoha a spojovací tabulky.
V tomto článku se budeme zabývat třetím typem vztahů:vztahem jeden k jednomu . Toto je nejméně běžný typ vztahu v datovém modelu. Uvedeme příklady vztahů jedna ku jedné, ukážeme zápis vztahů jedna ku jedné v ER diagramu a prodiskutujeme vztahy jedna ku jedné v praxi.
Příklady osobních vztahů
Za prvé, co je to osobní vztah? Je to vztah, kdy je záznam v jedné entitě (tabulce) spojen přesně s jedním záznamem v jiné entitě (tabulce).
Podívejme se na několik skutečných příkladů osobních vztahů:
- Země – hlavní město :Každá země má právě jedno hlavní město. Každé hlavní město je hlavním městem právě jedné země.
- Osoba – její otisky prstů . Každý člověk má unikátní sadu otisků prstů. Každá sada otisků identifikuje přesně jednu osobu.
- E-mail – uživatelský účet . U mnoha webových stránek je jedna e-mailová adresa přidružena přesně k jednomu uživatelskému účtu a každý uživatelský účet je identifikován svou e-mailovou adresou.
- Manžel – manžel/manželka :V monogamním manželství má každá osoba právě jednoho manželského partnera.
- Uživatelský profil – uživatelská nastavení . Jeden uživatel má jednu sadu uživatelských nastavení. Jedna sada uživatelských nastavení je přiřazena právě jednomu uživateli.
Pro srozumitelnost porovnejme tyto příklady se vztahy, které nejsou individuální:
- Země – město: Každé město se nachází přesně v jedné zemi, ale většina zemí má mnoho měst.
- Rodič – dítě :Každé dítě má dva rodiče, ale každý rodič může mít mnoho dětí.
- Zaměstnanec – manažer :Každý zaměstnanec má přesně jednoho přímého nadřízeného nebo manažera, ale každý manažer obvykle dohlíží na mnoho zaměstnanců.
Označení vztahu jeden k jednomu v diagramu ER
Vztah jedna ku jedné se v ER diagramu označuje, jako všechny vztahy, čárou spojující tyto dvě entity. Mohutnost „jedna“ je označena jednou přímkou. (Kardinalita „mnoho“ je označena symbolem vraní nohy.)
Vztah jedna ku jedné mezi zemí a kapitálem lze označit takto:
Kolmé přímky znamenají „povinné “. Tento diagram ukazuje, že pro hlavní město je povinné mít zemi a pro zemi je povinné mít hlavní město.
Další možností je, že jedna nebo obě strany vztahu budou volitelné . Volitelná strana je označena prázdným kroužkem. Tento diagram říká, že existuje vztah jedna ku jedné mezi osobou a jejími otisky prstů. Osoba je povinná (otisky prstů musí být přiřazeny osobě), ale otisky prstů jsou volitelné (osoba nemusí mít v databázi přiřazeny žádné otisky prstů).
Vztahy jeden k jednomu ve fyzické databázi
Existuje několik způsobů, jak implementovat vztah jedna ku jedné ve fyzické databázi.
Primární klíč jako cizí klíč
Jedním ze způsobů, jak implementovat vztah jedna ku jedné v databázi, je použití stejného primárního klíče v obou tabulkách. Řádky se stejnou hodnotou v primárním klíči spolu souvisí. V tomto příkladu je Francie country
s id
1 a jeho hlavní město je v tabulce capital
pod id
1.
country
id | jméno |
---|---|
1 | Francie |
2 | Německo |
3 | Španělsko |
capital
Technicky musí být jeden z primárních klíčů označen jako cizí klíč, jako v tomto datovém modelu:
Primární klíč v tabulce capital
je také cizí klíč, který odkazuje na sloupec id v tabulce země . Od capital.id
je primární klíč, každá hodnota ve sloupci je jedinečná, takže hlavní město může odkazovat na maximálně jednu zemi. Také musí odkaz na zemi – je to primární klíč, takže nemůže zůstat prázdný.
Další cizí klíč s jedinečným omezením
Dalším způsobem, jak implementovat vztah jedna ku jedné v databázi, je přidat nový sloupec a udělat z něj cizí klíč.
V tomto příkladu přidáme sloupec country_id
v tabulce capital
. Velká písmena s id
1, Madrid, je spojen se zemí 3, Španělskem.
country
id | jméno |
---|---|
1 | Francie |
2 | Německo |
3 | Španělsko |
capital
id | jméno | id země |
---|---|---|
1 | Madrid | 3 |
2 | Berlín | 2 |
3 | Paříž | 1 |
Technicky vzato, sloupec country_id
by měl být cizí klíč odkazující na id
sloupec v tabulce country
. Protože chcete, aby každé hlavní město bylo přidruženo přesně k jedné zemi, měli byste vytvořit sloupec cizího klíče country_id
unikátní.
Osobní vztahy v praxi
Málo osobních vztahů trvá
Vztahy jeden ku jednomu jsou nejméně častým typem vztahu. Jedním z důvodů je, že v reálném životě existuje jen velmi málo osobních vztahů. Také většina vztahů typu one-to-one je typu one-to-one pouze po určitou dobu. Pokud váš model obsahuje časovou komponentu a zachycuje historii změn, jak se velmi často stává, budete mít velmi málo vztahů mezi dvěma.
Monogamní vztah se může rozdělit nebo jeden z partnerů zemřít. Pokud modelujete realitu monogamních vztahů (jako jsou manželství nebo civilní svazky) v průběhu času, budete pravděpodobně muset modelovat skutečnost, že trvají pouze po určitou dobu.
Člověk by si myslel, že člověk a jeho otisky prstů se nikdy nezmění. Ale co když dotyčný o prst přijde nebo je prst těžce popálený? Jejich otisky se mohou změnit. Není to příliš častý scénář; u některých modelů to možná budete muset vzít v úvahu.
I něco zdánlivě tak stabilního, jako se země a jejich hlavní města v průběhu času mění. Například Bonn býval hlavním městem západního Německa (Bundesrepublik Deutschland) po druhé světové válce, kdy byl Berlín součástí východního Německa. To se změnilo po sjednocení Německa; hlavním městem Německa (Bundesrepublik Deutschland) je nyní Berlín. Zda byste to měli nebo neměli brát v úvahu, závisí na realitě vašeho podnikání a aplikaci, na které pracujete.
Možný scénář 1:1:volitelné části tabulky
Napadá mě jeden proveditelný scénář pro skutečný vztah jedna ku jedné:volitelné části tabulky. Představte si, že máte tabulku uživatel s uživatelskými údaji. Tabulka obsahuje obecné informace o uživateli, jako jsou jména uživatelů, e-mailové adresy a data přihlášení. Obsahuje také uživatelská nastavení, jako je barevný motiv nebo automatické přihlášení pro danou aplikaci. Většina uživatelů však nemá žádná uživatelská nastavení; používají výchozí nastavení.
user
id | jméno | datum_registrace | téma | autologin | |
---|---|---|---|---|---|
1 | Nathanael Talbot | [email protected] | 2020-12-12 | tmavé | pravda |
2 | Talitha Yates | [email protected] | 2020-12-14 | ||
3 | Markus Weir | [email protected] | 2020-12-15 | světlo | false |
4 | Nathalie Hays | [email protected] | 18. 12. 2020 | ||
5 | Církev Maurice | [email protected] | 20. 12. 2020 | ||
6 | Arwa Valdez | [email protected] | 21. 12. 2020 |
V této tabulce je mnoho prázdných polí. Můžete rozdělit user
tabulku na dvě tabulky:user
a user_settings
, který obsahuje informace o uživatelských nastaveních pro ty, kteří se rozhodli je vybrat.
user
id | jméno | datum_registrace | téma | autologin | |
---|---|---|---|---|---|
1 | Nathanael Talbot | [email protected] | 2020-12-12 | tmavé | pravda |
2 | Talitha Yates | [email protected] | 2020-12-14 | ||
3 | Markus Weir | [email protected] | 2020-12-15 | světlo | false |
4 | Nathalie Hays | [email protected] | 18. 12. 2020 | ||
5 | Církev Maurice | [email protected] | 20. 12. 2020 | ||
6 | Arwa Valdez | [email protected] | 21. 12. 2020 |
user_settings
id_uživatele | téma | autologin |
---|---|---|
1 | tmavé | pravda |
3 | světlo | false |
Rozdělením dat do dvou tabulek je dotazování na tabulky složitější:musíte spojit data z obou tabulek. Na druhé straně hlavní uživatel tabulka je jednodušší na správu.
Další informace o vztazích mezi databázemi
Vztah jedna ku jedné je vztah, kdy záznam v jedné tabulce je přidružen přesně k jednomu záznamu v jiné tabulce. Tento typ vztahu je v reálném životě vzácný. Pokud do svého datového modelu zahrnete čas, mnoho vztahů typu one-to-one se stane vztahy one-to-many nebo many-to-many. Nejběžnějším scénářem pro použití vztahu jedna ku jedné v databázi je rozdělení jedné tabulky na dvě:jedna s povinnými sloupci a druhá s volitelnými sloupci.
Pokud se vám tento článek líbil, podívejte se na další články o vztazích typu one-to-many a many-to-many na našem blogu.
Pokud jste studentem na kurzech databáze, nezapomeňte si vytvořit bezplatný akademický účet ve Vertabelo, našem online nástroji pro kreslení diagramů ER. Vertabelo vám umožňuje kreslit logické a fyzické ER diagramy přímo ve vašem prohlížeči. Podporuje PostgreSQL, SQL Server, Oracle, MySQL, Google BigQuery, Amazon Redshift a další relační databáze. Vyzkoušejte to a uvidíte, jak snadné je začít!