Pewnego dnia myślałem o normalizacji i przyszło mi do głowy, że nie mogę wymyślić czasu, w którym w bazie danych powinna istnieć relacja 1: 1.
Name:SSN
? Miałbym je w tym samym stole.PersonID:AddressID
? Znowu ten sam stół.
Potrafię wymyślić milion przykładów 1: wiele lub wiele: wiele (z odpowiednimi tabelami pośrednimi), ale nigdy 1: 1.
Czy brakuje mi czegoś oczywistego?
sql
database-design
one-to-one
database-normalization
Pulsehead
źródło
źródło
Odpowiedzi:
Relacja 1: 1 zwykle wskazuje, że z jakiegoś powodu podzielono większą jednostkę. Często dzieje się tak ze względu na wydajność w schemacie fizycznym, ale może się to zdarzyć również po stronie logiki, jeśli duża część danych ma być w tym samym czasie „nieznana” (w takim przypadku mamy 1: 0 lub 1: 1, ale nie więcej).
Jako przykład partycji logicznej: masz dane o pracowniku, ale istnieje większy zestaw danych, które należy zebrać wtedy i tylko wtedy, gdy zdecyduje się na ubezpieczenie zdrowotne. Zachowałbym dane demograficzne dotyczące ubezpieczenia zdrowotnego w innej tabeli, aby zarówno ułatwić podział zabezpieczeń, jak i uniknąć przenoszenia tych danych w zapytaniach niezwiązanych z ubezpieczeniem.
Przykładem partycji fizycznej byłyby te same dane przechowywane na wielu serwerach. Mogę przechowywać dane demograficzne dotyczące ubezpieczenia zdrowotnego w innym stanie (na przykład biuro HR), a podstawowa baza danych może łączyć się z nią tylko za pośrednictwem połączonego serwera ... unikając replikowania poufnych danych do innych lokalizacji, ale udostępniając ją (zakładając tutaj rzadkie) zapytania, które tego potrzebują.
Partycjonowanie fizyczne może być przydatne, gdy masz zapytania, które wymagają spójnych podzbiorów większej jednostki.
źródło
Jednym z powodów jest wydajność bazy danych. Relacja 1: 1 pozwala podzielić pola, na które wpłynie blokada wiersza / tabeli. Jeśli tabela A ma mnóstwo aktualizacji, a tabela b ma mnóstwo odczytów (lub mnóstwo aktualizacji z innej aplikacji), to blokowanie tabeli A nie wpłynie na to, co dzieje się w tabeli B.
Inni podnoszą dobry punkt widzenia. Bezpieczeństwo może być również dobrym powodem, w zależności od tego, jak aplikacje itp. Wpływają na system. Chciałbym przyjąć inne podejście, ale może to być łatwy sposób na ograniczenie dostępu do niektórych danych. Naprawdę łatwo jest po prostu odmówić dostępu do określonego stołu w mgnieniu oka.
Mój wpis na blogu o tym.
źródło
Rzadkość. Relacja danych może być technicznie 1: 1, ale odpowiednie wiersze nie muszą istnieć dla każdego wiersza. Więc jeśli masz dwadzieścia milionów wierszy i istnieje pewien zestaw wartości, który istnieje tylko dla 0,5% z nich, oszczędności miejsca są ogromne, jeśli wypchniesz te kolumny do tabeli, która może być rzadko zapełniona.
źródło
Większość wysoko ocenianych odpowiedzi podaje bardzo przydatne powody do strojenia i optymalizacji bazy danych dla relacji 1: 1, ale chcę się skupić wyłącznie na przykładach „na wolności”, w których relacje 1: 1 występują naturalnie.
Proszę zwrócić uwagę na jedną ważną cechę implementacji bazy danych większości z tych przykładów: żadne historyczne informacje nie są zachowywane na temat relacji 1: 1. Oznacza to, że w dowolnym momencie te relacje są 1: 1. Jeśli projektant bazy danych chce rejestrować zmiany w uczestnikach relacji w czasie, wówczas relacje przybierają postać 1: M lub M: M; tracą swoją naturę 1: 1. Po zrozumieniu tego, oto idzie:
„Is-A” lub relacje nadtyp / podtyp lub dziedziczenie / klasyfikacja: Ta kategoria ma miejsce, gdy jedna jednostka jest określonym typem innej jednostki. Na przykład może istnieć jednostka pracownika z atrybutami, które dotyczą wszystkich pracowników, a następnie różne jednostki wskazujące określone typy pracowników z atrybutami unikalnymi dla tego typu pracownika, np. Lekarz, księgowy, pilot itp. Ten projekt pozwala uniknąć wielu zer, ponieważ wielu pracowników nie miałoby wyspecjalizowanych atrybutów określonego podtypu. Innymi przykładami w tej kategorii mogą być Produkt jako nadrzędny oraz Podtypy Produktu produkcyjnego i Dostawy do konserwacji; Zwierzę jako nadtyp oraz Pies i kot jako podtypy; itd. Zauważ, że ilekroć próbujesz odwzorować zorientowaną obiektowo hierarchię dziedziczenia na relacyjną bazę danych (na przykład w modelu obiektowo-relacyjnym), jest to rodzaj relacji, która reprezentuje takie scenariusze.
Relacje „szef” , takie jak kierownik, przewodniczący, prezes itp., W których jednostka organizacyjna może mieć tylko jednego szefa, a jedna osoba może być szefem tylko jednej jednostki organizacyjnej. Jeśli te zasady mają zastosowanie, to masz relację 1: 1, na przykład jeden kierownik działu, jeden dyrektor generalny firmy itp. Relacje „szefowe” dotyczą nie tylko ludzi. Ten sam rodzaj relacji zachodzi wtedy, gdy jest tylko jeden sklep jako siedziba firmy lub np. Tylko jedno miasto jest stolicą kraju.
Niektóre rodzaje alokacji rzadkich zasobów , np. Jednemu pracownikowi można w danym momencie przydzielić tylko jeden samochód służbowy (np. Jedna ciężarówka na kierowcę ciężarówki, jedna taksówka na taksówkarza itp.). Kolega podał mi ostatnio ten przykład.
Małżeństwo (przynajmniej w jurysdykcjach, w których poligamia jest nielegalna): jedna osoba może być w związku małżeńskim tylko z jedną osobą naraz. Ten przykład pochodzi z podręcznika, w którym wykorzystano go jako przykład jednoargumentowego związku 1: 1, gdy firma rejestruje małżeństwa między pracownikami.
Dopasowane rezerwacje : gdy dokonywana jest unikalna rezerwacja, a następnie realizowana jako dwa oddzielne podmioty. Na przykład system wynajmu samochodów może rejestrować rezerwację w jednej jednostce, a następnie faktyczny wynajem w oddzielnej jednostce. Chociaż taką sytuację można alternatywnie zaprojektować jako jeden podmiot, rozsądne może być rozdzielenie podmiotów, ponieważ nie wszystkie rezerwacje są spełnione i nie wszystkie wypożyczenia wymagają rezerwacji, a obie sytuacje są bardzo częste.
Powtarzam zastrzeżenie, które zrobiłem wcześniej, że większość z nich to relacje 1: 1 tylko wtedy, gdy nie są zapisane żadne informacje historyczne. Tak więc, jeśli pracownik zmieni swoją rolę w organizacji, kierownik przejmuje odpowiedzialność za inny dział, pracownikowi zostaje przydzielony pojazd, albo ktoś owdowiał i ponownie się ożenił, wówczas uczestnicy relacji mogą się zmienić. Jeśli baza danych nie przechowuje żadnej wcześniejszej historii dotyczącej tych relacji 1: 1, pozostają one poprawnymi relacjami 1: 1. Ale jeśli baza danych rejestruje informacje historyczne (takie jak dodawanie dat rozpoczęcia i zakończenia dla każdej relacji), to prawie wszystkie zmieniają się w relacje M: M.
Istnieją dwa godne uwagi wyjątki od notatki historycznej: po pierwsze, niektóre relacje zmieniają się tak rzadko, że informacje historyczne normalnie nie byłyby przechowywane. Na przykład większość relacji IS-A (np. Typ produktu) jest niezmienna; to znaczy, nigdy nie mogą się zmienić. Zatem historyczny punkt rekordu jest dyskusyjny; byłyby one zawsze realizowane jako naturalne relacje 1: 1. Po drugie, relacja rezerwacja-wynajem zapisuje się osobno, ponieważ rezerwacja i wynajem są niezależnymi wydarzeniami, każde z własnymi datami. Ponieważ jednostki mają własne daty, a nie sam związek 1: 1 mający datę początkową, pozostaną one jako relacje 1: 1, nawet jeśli przechowywane są informacje historyczne.
źródło
Twoje pytanie można zinterpretować na kilka sposobów, ze względu na sposób, w jaki je sformułowałeś. Odpowiedzi to pokazują.
Z pewnością mogą istnieć relacje 1: 1 między elementami danych w świecie rzeczywistym. Bez wątpienia. Relacja „jest” to na ogół jeden do jednego. Samochód to pojazd. Jeden samochód to jeden pojazd. Jeden pojazd może być jednym samochodem. Niektóre pojazdy to ciężarówki, w którym to przypadku jeden pojazd nie jest samochodem. Kilka odpowiedzi dotyczy tej interpretacji.
Ale myślę, że tak naprawdę pytasz ... czy kiedy istnieją relacje 1: 1, czy tabele powinny być kiedykolwiek dzielone? Innymi słowy, czy kiedykolwiek powinieneś mieć dwie tabele zawierające dokładnie te same klucze? W praktyce większość z nas analizuje tylko klucze podstawowe, a nie inne klucze kandydujące, ale to pytanie jest nieco inne.
Reguły normalizacji dla 1NF, 2NF i 3NF nigdy nie wymagają dekomponowania (dzielenia) tabeli na dwie tabele z tym samym kluczem podstawowym. Nie zastanawiałem się, czy umieszczenie schematu w BCNF, 4NF lub 5NF może kiedykolwiek spowodować powstanie dwóch tabel z tymi samymi kluczami. Z góry myślę, że zgaduję, że nie.
Istnieje poziom normalizacji zwany 6NF. Reguła normalizacji dla 6NF może zdecydowanie skutkować dwiema tabelami z tym samym kluczem podstawowym. 6NF ma tę przewagę nad 5NF, że można całkowicie uniknąć NULLS. Jest to ważne dla niektórych, ale nie dla wszystkich projektantów baz danych. Nigdy nie zadałem sobie trudu, aby umieścić schemat w 6NF.
W 6NF brakujące dane mogą być reprezentowane przez pominięty wiersz zamiast wiersza z wartością NULL w jakiejś kolumnie.
Istnieją inne powody niż normalizacja podziału tabel. Czasami podzielone tabele dają lepszą wydajność. W przypadku niektórych silników baz danych można uzyskać takie same korzyści w zakresie wydajności, dzieląc tabelę na partycje zamiast jej faktycznego dzielenia. Może to mieć tę zaletę, że logiczny projekt jest łatwy do zrozumienia, jednocześnie dając silnikowi bazy danych narzędzia potrzebne do przyspieszenia działania.
źródło
Używam ich przede wszystkim z kilku powodów. Jedną z nich jest znacząca różnica w szybkości zmian danych. Niektóre z moich tabel mogą mieć ślady audytu, w których śledzę poprzednie wersje rekordów, jeśli zależy mi tylko na śledzeniu poprzednich wersji 5 z 10 kolumn, dzielenie tych 5 kolumn na osobną tabelę z mechanizmem ścieżki audytu jest bardziej wydajne. Ponadto mogę mieć rekordy (na przykład dotyczące aplikacji księgowej), które są tylko do zapisu. Nie możesz zmienić kwot w dolarach ani konta, na które były przeznaczone, jeśli popełniłeś błąd to musisz zrobić odpowiedni rekord, aby odpisać, skorygować nieprawidłowy rekord, a następnie utworzyć wpis korygujący. Mam ograniczenia w tabeli wymuszające fakt, że nie można ich zaktualizować ani usunąć, ale mogę mieć kilka atrybutów tego obiektu, które są plastyczne, są one przechowywane w osobnej tabeli bez ograniczeń dotyczących modyfikacji. Innym razem robię to w przypadku wniosków dotyczących dokumentacji medycznej. Istnieją dane związane z wizytą, których nie można zmienić po jej wylogowaniu, oraz inne dane dotyczące wizyty, które można zmienić po jej wylogowaniu. W takim przypadku podzielę dane i ustawię wyzwalacz na zablokowanej tabeli, odrzucając aktualizacje zablokowanej tabeli po wylogowaniu, ale zezwalając na aktualizacje danych, których lekarz się nie wylogowuje.
Inny plakat komentował, że 1: 1 nie jest normalizowany, nie zgadzam się z tym w niektórych sytuacjach, zwłaszcza w przypadku podtypów. Powiedzmy, że mam tabelę pracowników, a kluczem podstawowym jest ich numer SSN (to przykład, zachowajmy debatę, czy to dobry klucz, czy nie dla innego wątku). Pracownicy mogą być różnego rodzaju, powiedzmy, że są tymczasowi lub stali, a jeśli są zatrudnieni na stałe, mają do wypełnienia więcej pól, takich jak numer telefonu do biura, który nie powinien być pusty, jeśli typ = „Stały”. W bazie danych trzeciej postaci normalnej kolumna powinna zależeć tylko od klucza, czyli pracownika, ale w rzeczywistości zależy to od pracownika i typu, więc relacja 1: 1 jest całkowicie normalna i pożądana w tym przypadku. Zapobiega również zbyt rzadkim tabelom, jeśli mam 10 kolumn, które normalnie są wypełnione,
źródło
Najczęstszym scenariuszem, jaki przychodzi mi do głowy, jest sytuacja, gdy masz BLOB-y. Powiedzmy, że chcesz przechowywać duże obrazy w bazie danych (zazwyczaj nie jest to najlepszy sposób ich przechowywania, ale czasami ograniczenia sprawiają, że jest to wygodniejsze). Zazwyczaj obiekt BLOB powinien znajdować się w oddzielnej tabeli, aby poprawić wyszukiwanie danych innych niż BLOB.
źródło
Jeśli chodzi o czystą naukę, tak, są bezużyteczne.
W prawdziwych bazach danych czasami przydatne jest trzymanie rzadko używanego pola w oddzielnej tabeli: aby przyspieszyć zapytania używające tego i tylko tego pola; aby uniknąć blokad itp.
źródło
Zamiast używać widoków do ograniczania dostępu do pól, czasami warto przechowywać ograniczone pola w oddzielnej tabeli, do której mają dostęp tylko niektórzy użytkownicy.
źródło
Mogę również pomyśleć o sytuacjach, w których masz model OO, w którym używasz dziedziczenia, a drzewo dziedziczenia musi zostać utrwalone w bazie danych.
Na przykład, masz klasę Bird i Fish, które dziedziczą po Animal. W swojej bazie danych możesz mieć tabelę `` Animal '', która zawiera wspólne pola klasy Animal, a tabela Animal ma relację jeden do jednego z tabelą Bird i relację jeden do jednego z tabelą Fish stół.
W takim przypadku nie musisz mieć jednej tabeli Animal, która zawiera wiele kolumn dopuszczających wartość null, aby przechowywać właściwości Bird i Fish, gdzie wszystkie kolumny zawierające dane Fish mają ustawioną wartość NULL, gdy rekord reprezentuje ptaka.
Zamiast tego masz rekord w tabeli Birds, który ma relację jeden do jednego z rekordem w tabeli Animal.
źródło
Relacje 1-1 są również konieczne, jeśli masz zbyt dużo informacji. Dla każdego rekordu w tabeli istnieje ograniczenie rozmiaru rekordu. Czasami tabele są dzielone na dwie części (z najczęściej przywoływanymi informacjami w tabeli głównej), aby rozmiar rekordu nie był zbyt duży. Bazy danych są również wydajniejsze w wykonywaniu zapytań, jeśli tabele są wąskie.
źródło
Jest to również sposób na rozszerzenie tabeli, która jest już produkowana, przy mniejszym (postrzeganym) ryzyku niż „rzeczywista” zmiana bazy danych. Widzenie relacji 1: 1 w starszym systemie jest często dobrym wskaźnikiem, że pola zostały dodane po początkowym projekcie.
źródło
W SQL nie można wymusić relacji 1: 1 między dwiema tabelami, która jest obowiązkowa po obu stronach (chyba że tabele są tylko do odczytu). Z praktycznego punktu widzenia relacja „1: 1” w języku SQL tak naprawdę oznacza 1: 0 | 1.
Brak możliwości obsługi obowiązkowej liczności w ograniczeniach referencyjnych jest jednym z poważnych ograniczeń SQL. Ograniczenia „odroczone” tak naprawdę nie liczą się, ponieważ są po prostu sposobem na powiedzenie, że ograniczenie nie jest egzekwowane przez pewien czas.
źródło
Jeśli korzystasz z danych z jednym z popularnych ORMów, możesz podzielić tabelę na wiele tabel, aby dopasować ją do hierarchii obiektów.
źródło
Zauważyłem, że kiedy tworzę relację 1: 1, jest to całkowicie z powodów systemowych, a nie relacyjnych.
Na przykład odkryłem, że umieszczenie zarezerwowanych aspektów użytkownika w jednej tabeli i umieszczenie edytowalnych przez użytkownika pól użytkownika w innej tabeli znacznie ułatwia logiczne zapisywanie reguł dotyczących uprawnień do tych pól.
Ale masz rację, w teorii relacje 1: 1 są całkowicie wymyślone i są prawie fenomenem. Jednak logicznie pozwala programom i optymalizacjom na łatwiejsze wyodrębnienie bazy danych.
źródło
W większości przypadków uważa się, że projekty są 1: 1, dopóki ktoś nie zapyta „cóż, dlaczego nie może to być 1: wiele”? Przedwczesne rozdzielanie pojęć od siebie odbywa się w oczekiwaniu na ten powszechny scenariusz. Osoba i adres nie są tak mocno powiązane. Wiele osób ma wiele adresów. I tak dalej...
Zwykle dwie oddzielne przestrzenie obiektów oznaczają, że jedną lub obie można pomnożyć (x: wiele). Gdyby dwa obiekty były naprawdę, naprawdę 1: 1, nawet filozoficznie, to bardziej byłby to związek. Te dwa „obiekty” są w rzeczywistości częściami jednego całego obiektu.
źródło
rozszerzone informacje, które są potrzebne tylko w niektórych scenariuszach. w starszych aplikacjach i językach programowania (takich jak RPG), w których programy są kompilowane w tabelach (więc jeśli tabela się zmieni, musisz ponownie skompilować program (y)). Oznaczanie plików może być również przydatne w przypadkach, gdy musisz się martwić o rozmiar tabeli.
źródło
Najczęściej jest to konstrukcja bardziej fizyczna niż logiczna. Jest powszechnie używany do partycjonowania tabeli w pionie, aby skorzystać z dzielenia we / wy na urządzenia fizyczne lub innych optymalizacji zapytań związanych z segregacją danych, do których dostęp jest rzadszy, lub danych, które muszą być bezpieczniejsze niż pozostałe atrybuty tego samego obiektu (SSN, wynagrodzenie itp.).
Jedyną logiczną kwestią, która nakazuje relację 1-1, jest sytuacja, gdy pewne atrybuty mają zastosowanie tylko do niektórych jednostek. Jednak w większości przypadków istnieje lepszy / bardziej znormalizowany sposób modelowania danych poprzez wyodrębnianie jednostek.
źródło
Najlepszym powodem, dla którego widzę relację 1: 1, jest podtyp projektu bazy danych SuperType. Na podstawie tego modelu stworzyłem strukturę danych Real Estate MLS. Było pięć różnych źródeł danych; Mieszkaniowe, komercyjne, wielorodzinne, hotele i grunty.
Utworzyłem SuperType o nazwie property, który zawierał dane wspólne dla każdego z pięciu oddzielnych źródeł danych. Pozwoliło to na bardzo szybkie „proste” wyszukiwanie we wszystkich typach danych.
Tworzę pięć oddzielnych podtypów, które przechowują unikalne elementy danych dla każdego z pięciu źródeł danych. Każdy rekord SuperType miał relację 1: 1 z odpowiednim rekordem podtypu.
Jeśli klient chciał szczegółowego wyszukiwania, musiał wybrać typ Super-Sub, na przykład PropertyResidential.
źródło
Moim zdaniem relacja 1: 1 odwzorowuje dziedziczenie klas na RDBMS. Istnieje tabela A, która zawiera wspólne atrybuty, tj. Status klasy partent. Każdy odziedziczony status klasy jest odwzorowywany w RDBMS z tabelą B w relacji 1: 1 do tabeli A zawierającej wyspecjalizowane atrybuty. Tabela nazwy A zawiera również pole „typ”, które reprezentuje funkcję „rzutowania”
Cześć Mario
źródło
Możesz utworzyć tabelę relacji jeden do jednego, jeśli istnieje znacząca korzyść dotycząca wydajności. Rzadko używane pola można umieścić w osobnej tabeli.
źródło
Relacje 1: 1 tak naprawdę nie mają sensu, jeśli interesujesz się normalizacją, ponieważ wszystko, co byłoby 1: 1, byłoby trzymane w tej samej tabeli.
Jednak w prawdziwym świecie często jest inaczej. Możesz podzielić swoje dane, aby dopasować je do interfejsu aplikacji.
źródło
Prawdopodobnie jeśli masz jakieś obiekty wpisane w bazie danych.
Powiedzmy w tabeli T1, że masz kolumny C1, C2, C3… z relacją jeden do jednego. W porządku, jest w znormalizowanej formie. Powiedzmy teraz, że w tabeli T2 masz kolumny C1, C2, C3,… (nazwy mogą się różnić, ale powiedz, że typy i rola są takie same) z relacją jeden do jednego. Dla T2 jest OK z tych samych powodów, co w przypadku T1.
Jednak w tym przypadku widzę dopasowanie do oddzielnej tabeli T3, zawierającej C1, C2, C3… i relację jeden do jednego od T1 do T3 i od T2 do T3. Jeszcze bardziej widzę dopasowanie, jeśli istnieje inna tabela, z którą już istnieje jeden do wielu C1, C2, C3… powiedzmy od tabeli A do wielu wierszy w tabeli B. Następnie zamiast T3 używasz B i masz relacja jeden do jednego od T1 do B, taka sama od T2 do B i wciąż ta sama do relacji wielokrotnej od A do B.
Uważam, że normalizacja się z tym nie zgadza i może to być idea poza nią: identyfikowanie typów obiektów i przenoszenie obiektów tego samego typu do własnej puli pamięci, przy użyciu relacji jeden do jednego z niektórych tabel i jeden do wielu relacja z innych tabel.
źródło
Jest to niepotrzebne wielkie ze względów bezpieczeństwa, ale istnieją lepsze sposoby przeprowadzania kontroli bezpieczeństwa. Wyobraź sobie, że tworzysz klucz, który otwiera tylko jedne drzwi. Jeśli kluczem można otworzyć jakiekolwiek inne drzwi, należy zadzwonić na alarm. W istocie możesz mieć „CitizenTable” i „VotingTable”. Obywatel Jeden głos na Kandydata Jeden, który jest przechowywany w Tabeli do głosowania. Jeśli obywatel jeden ponownie pojawi się na stole do głosowania, to powinien być alarm. Radzę, jest to relacja jeden do jednego, ponieważ nie odnosimy się do pola kandydata, mamy na myśli tabelę do głosowania i tabelę obywateli.
Przykład:
Następnie, jeśli zobaczymy tabelę do głosowania jako taką:
Można powiedzieć, że obywatel numer 3 to podpalony kłamca, który oszukał Bern Nie. Tylko przykład.
źródło
Kiedy masz do czynienia z bazą danych z produktu innej firmy, prawdopodobnie nie chcesz zmieniać ich bazy danych, aby zapobiec ścisłemu powiązaniu. ale możesz mieć dane, które odpowiadają 1: 1 ich danym
źródło
Gdziekolwiek były dwie całkowicie niezależne jednostki, które łączyła relacja jeden do jednego. Musi być wiele przykładów:
osoba <-> dentysta (to 1: N, więc to źle!)
osoba <-> lekarz (to 1: N, więc też jest źle!)
osoba <-> współmałżonek (to 1: 0 | 1, więc w większości źle!)
EDYTOWAĆ: Tak, to były bardzo złe przykłady, szczególnie jeśli zawsze szukałem 1: 1, a nie 0 lub 1 po obu stronach. Myślę, że mój mózg źle działał :-)
Więc spróbuję ponownie. Po chwili namysłu okazuje się, że jedynym sposobem, aby mieć dwa oddzielne byty, które muszą (jeśli chodzi o oprogramowanie) być razem przez cały czas, jest istnienie razem w wyższej kategoryzacji. Wtedy, wtedy i tylko wtedy, gdy wpadniesz w niższy rozkład, rzeczy są i powinny być oddzielone, ale na wyższym poziomie nie mogą żyć bez siebie. Kontekst jest więc kluczem.
W przypadku medycznej bazy danych możesz chcieć przechowywać różne informacje o określonych obszarach ciała, zachowując je jako oddzielną całość. W takim przypadku pacjent ma tylko jedną głowę i musi ją mieć, inaczej nie jest pacjentem. (Mają też jedno serce i kilka innych niezbędnych pojedynczych narządów). Jeśli na przykład interesuje Cię śledzenie operacji, każdy region powinien być odrębną jednostką.
W systemie produkcji / inwentaryzacji, jeśli śledzisz montaż pojazdów, z pewnością chcesz obserwować postęp silnika w inny sposób niż karoseria, ale istnieje relacja jeden do jednego. Opieka musi mieć silnik i tylko jeden (inaczej nie byłby to już „samochód”). Silnik należy tylko do jednego samochodu.
W każdym przypadku możesz stworzyć oddzielne jednostki jako jeden duży rekord, ale biorąc pod uwagę poziom dekompozycji, byłoby to błędne. W tych konkretnych kontekstach są one prawdziwie niezależnymi bytami, chociaż na wyższym poziomie mogą się tak nie wydawać.
Paweł.
źródło