sql >> Databáze >  >> RDS >> Database

Co je to vztah typu one-to-one v databázi?

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 e-mail 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 e-mail 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!


  1. Jak vytvářet a mazat databáze a tabulky v PostgreSQL

  2. Automatizace tabulkového modelu zpracování databází Analysis Services (SSAS) na serveru SQL Server

  3. MySQL parametrizované dotazy

  4. ORA-28040:Žádná výjimka odpovídající autentizačního protokolu