Database
 sql >> Baza danych >  >> RDS >> Database

Co to jest relacja jeden-do-jednego w bazie danych?

Co to jest relacja jeden-do-jednego w modelowaniu danych? Jak zaimplementować tę relację w bazie danych? Przykłady w tym artykule odpowiedzą na te pytania.

Istnieją trzy rodzaje relacji między jednostkami (tabelami) w modelowaniu danych:

  • Relacje jeden-do-wielu (oznaczane również jako 1:M).
  • Relacje wiele-do-wielu (M:N).
  • Relacje jeden-do-jednego (1:1).

Najpopularniejszym typem relacji jest relacja jeden-do-wielu, w której do rekordu w jednej encji może odwoływać się wiele rekordów w innej encji. Innym powszechnym typem jest relacja wiele-do-wielu. Ten typ relacji jest używany tylko w logicznych modelach danych. W fizycznej bazie danych musi być zaimplementowana przy użyciu relacji jeden-do-wielu i tabeli połączeń.

W tym artykule omówimy trzeci typ relacji:relacja jeden-do-jednego . Jest to najrzadziej spotykany typ relacji w modelu danych. Podamy przykłady relacji jeden-do-jednego, pokażemy notację relacji jeden-do-jednego na diagramie ER i omówimy relacje jeden-do-jednego w praktyce.

Przykłady relacji jeden-do-jednego

Po pierwsze, czym jest relacja jeden-do-jednego? Jest to relacja, w której rekord w jednej encji (tabeli) jest powiązany z dokładnie jednym rekordem w innej encji (tabeli).

Zobaczmy kilka rzeczywistych przykładów relacji jeden-do-jednego:

  • Kraj - stolica :Każdy kraj ma dokładnie jedną stolicę. Każda stolica jest stolicą dokładnie jednego kraju.
  • Osoba – jej odciski palców . Każda osoba ma unikalny zestaw odcisków palców. Każdy zestaw odcisków palców identyfikuje dokładnie jedną osobę.
  • E-mail — konto użytkownika . W wielu witrynach jeden adres e-mail jest powiązany z dokładnie jednym kontem użytkownika, a każde konto użytkownika jest identyfikowane przez jego adres e-mail.
  • Małżonek - małżonek :W monogamicznym małżeństwie każda osoba ma dokładnie jednego małżonka.
  • Profil użytkownika — ustawienia użytkownika . Jeden użytkownik ma jeden zestaw ustawień użytkownika. Jeden zestaw ustawień użytkownika jest powiązany z dokładnie jednym użytkownikiem.

Dla jasności porównajmy te przykłady z relacjami, które nie są jeden do jednego:

  • Kraj - miasto: Każde miasto znajduje się dokładnie w jednym kraju, ale większość krajów ma wiele miast.
  • Rodzic - dziecko :Każde dziecko ma dwoje rodziców, ale każdy rodzic może mieć wiele dzieci.
  • Pracownik - kierownik :Każdy pracownik ma dokładnie jednego bezpośredniego przełożonego lub kierownika, ale każdy kierownik zwykle nadzoruje wielu pracowników.

Oznaczanie relacji jeden-do-jednego na diagramie ER

Relacja jeden-do-jednego na diagramie ER jest oznaczona, podobnie jak wszystkie relacje, linią łączącą te dwie jednostki. Kardynalność „jeden” oznaczona jest pojedynczą linią prostą. (Kardynalność „wiele” jest oznaczona symbolem kurzej łapki).

Relację jeden do jednego między krajem a kapitałem można opisać w następujący sposób:

Prostopadłe linie proste oznaczają „obowiązkowe ”. Ten diagram pokazuje, że stolica musi mieć kraj i kraj musi mieć stolicę.

Inną możliwością jest, aby jedna lub obie strony relacji były opcjonalne . Opcjonalna strona jest oznaczona otwartym kółkiem. Ten diagram mówi, że istnieje relacja jeden do jednego między osobą a jej odciskami palców. Osoba jest obowiązkowa (odciski palców muszą być przypisane do osoby), ale odciski palców są opcjonalne (osoba może nie mieć przypisanych odcisków palców w bazie danych).

Relacje jeden-do-jednego w fizycznej bazie danych

Istnieje kilka sposobów na zaimplementowanie relacji jeden-do-jednego w fizycznej bazie danych.

Klucz podstawowy jako klucz obcy

Jednym ze sposobów zaimplementowania relacji jeden-do-jednego w bazie danych jest użycie tego samego klucza podstawowego w obu tabelach. Wiersze o tej samej wartości w kluczu podstawowym są powiązane. W tym przykładzie Francja to country z id 1 i jego stolica znajduje się w tabeli capital pod id 1.

country

id nazwa
1 Francja
2 Niemcy
3 Hiszpania

capital

Technicznie jeden z kluczy podstawowych musi być oznaczony jako klucz obcy, tak jak w tym modelu danych:

Klucz podstawowy w tabeli capital jest również kluczem obcym, który odwołuje się do kolumny id w tabeli kraj . Od capital.id jest kluczem podstawowym, każda wartość w kolumnie jest unikalna, więc kapitał może odnosić się co najwyżej do jednego kraju. To także musi odwołuje się do kraju – jest to klucz podstawowy, więc nie może być pusty.

Dodatkowy klucz obcy z unikalnym ograniczeniem

Innym sposobem na zaimplementowanie relacji jeden do jednego w bazie danych jest dodanie nowej kolumny i uczynienie jej kluczem obcym.

W tym przykładzie dodajemy kolumnę country_id w tabeli capital . Kapitał z id 1, Madryt, jest powiązany z krajem 3, Hiszpanią.

country

id nazwa
1 Francja
2 Niemcy
3 Hiszpania

capital

id nazwa identyfikator kraju
1 Madryt 3
2 Berlin 2
3 Paryż 1

Technicznie rzecz biorąc, kolumna country_id powinien być kluczem obcym odwołującym się do id kolumna w tabeli country . Ponieważ chcesz, aby każdy kapitał był powiązany dokładnie z jednym krajem, powinieneś utworzyć kolumnę klucza obcego country_id wyjątkowy.

Relacje jeden-do-jednego w praktyce

Kilka relacji jeden-do-jednego trwa

Relacje jeden-do-jednego są najrzadziej występującym typem relacji. Jednym z powodów jest to, że w prawdziwym życiu istnieje bardzo niewiele relacji jeden-do-jednego. Ponadto większość relacji jeden-do-jednego to relacje jeden-do-jednego tylko przez pewien okres czasu. Jeśli Twój model zawiera składnik czasu i rejestruje historię zmian, jak to często bywa, będziesz mieć bardzo niewiele relacji jeden-do-jednego.

Związek monogamiczny może się rozpaść lub jeden z partnerów może umrzeć. Jeśli będziesz modelować rzeczywistość związków monogamicznych (takich jak małżeństwa lub związki cywilne) w czasie, prawdopodobnie będziesz musiał modelować fakt, że trwają one tylko przez pewien okres.

Można by pomyśleć, że osoba i jej odciski palców nigdy się nie zmieniają. Ale co, jeśli osoba straci palec lub palec zostanie mocno spalony? Ich odciski palców mogą się zmienić. To niezbyt częsty scenariusz; jednak w niektórych modelach może być konieczne wzięcie tego pod uwagę.

Nawet coś pozornie tak stabilnego jak kraje i ich stolice zmieniają się w czasie. Na przykład Bonn było stolicą Niemiec Zachodnich (Bundesrepublik Deutschland) po II wojnie światowej, kiedy Berlin był częścią Niemiec Wschodnich. Zmieniło się to po zjednoczeniu Niemiec; stolicą Niemiec (Bundesrepublik Deutschland) jest teraz Berlin. To, czy powinieneś brać to pod uwagę, czy nie, zależy od Twojej rzeczywistości biznesowej i aplikacji, nad którą pracujesz.

Wykonalny scenariusz 1:1:opcjonalne części tabeli

Przychodzi mi do głowy jeden możliwy scenariusz prawdziwej relacji jeden-do-jednego:opcjonalne części tabeli. Wyobraź sobie, że masz stół użytkownik z danymi użytkownika. Tabela zawiera ogólne informacje o użytkownikach, takie jak nazwy użytkowników, adresy e-mail i daty rejestracji. Zawiera również ustawienia użytkownika, takie jak motyw kolorystyczny lub automatyczne logowanie do tej aplikacji. Jednak większość użytkowników nie ma żadnych ustawień użytkownika; używają ustawień domyślnych.

user

id nazwa e-mail data rejestracji motyw automatyczne logowanie
1 Nathanael Talbot [email protected] 2020-12-12 ciemny prawda
2 Talitha Yates [email protected] 2014-12-14
3 Jaz Markusa [email protected] 2020-12-15 lekkie fałsz
4 Nathalie Hays [email protected] 2018-12-18
5 Kościół Maurycego [email protected] 2020-12-20
6 Arwa Valdez [email protected] 21.12.2020

W tej tabeli jest dużo pustych pól. Możesz podzielić user tabela na dwie tabele:user i user_settings , który zawiera informacje o ustawieniach użytkowników dla tych, którzy je wybrali.

user

id nazwa e-mail data rejestracji motyw automatyczne logowanie
1 Nathanael Talbot [email protected] 2020-12-12 ciemny prawda
2 Talitha Yates [email protected] 2014-12-14
3 Jaz Markusa [email protected] 2020-12-15 lekkie fałsz
4 Nathalie Hays [email protected] 2018-12-18
5 Kościół Maurycego [email protected] 2020-12-20
6 Arwa Valdez [email protected] 21.12.2020

user_settings

user_id motyw automatyczne logowanie
1 ciemny prawda
3 lekkie fałsz

Podział danych na dwie tabele sprawia, że ​​zapytania dotyczące tabel są bardziej złożone:musisz połączyć dane z obu tabel. Z drugiej strony główny użytkownik tabela jest prostsza w zarządzaniu.

Dowiedz się więcej o relacjach z bazami danych

Relacja jeden-do-jednego to relacja, w której rekord w jednej tabeli jest skojarzony z dokładnie jednym rekordem w innej tabeli. Ten rodzaj relacji jest rzadki w prawdziwym życiu. Jeśli w modelu danych uwzględnisz czas, wiele relacji jeden-do-jednego stanie się relacjami jeden-do-wielu lub wiele-do-wielu. Najczęstszym scenariuszem korzystania z relacji jeden-do-jednego w bazie danych jest podzielenie jednej tabeli na dwie:jedna z obowiązkowymi kolumnami, druga z opcjonalnymi.

Jeśli podobał Ci się ten artykuł, zapoznaj się z innymi artykułami na temat relacji jeden-do-wielu i wiele-do-wielu na naszym blogu.

Jeśli jesteś studentem biorącym udział w zajęciach z bazami danych, upewnij się, że utworzyłeś bezpłatne konto akademickie w Vertabelo, naszym internetowym narzędziu do rysowania diagramów ER. Vertabelo umożliwia rysowanie logicznych i fizycznych diagramów ER bezpośrednio w przeglądarce. Obsługuje PostgreSQL, SQL Server, Oracle, MySQL, Google BigQuery, Amazon Redshift i inne relacyjne bazy danych. Wypróbuj i zobacz, jak łatwo zacząć!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Podejście do strojenia indeksów – część 1

  2. Operator SQL AND dla początkujących

  3. Notacje ERD w modelowaniu danych

  4. Co to jest technologia Java JPA?

  5. Używanie JShell w Javie 9 w NetBeans 9.0, część 4