Czym jest relacja atomowa w pierwszej postaci normalnej

Przeczytałem definicję 1NF, która brzmi: „Jeśli każdy atrybut relacji jest atomowy”. Powiedz mi, co to jest Atomic.

Komentarze

Odpowiedź

1NF wymaga, aby każda pozycja atrybutu w każdej krotce w każdej relacji zawierała pojedynczą wartość odpowiedniego typu . Typy mogą być dowolnie złożone. W rzeczywistości typy mogą być relacjami. (Książka CJ Datea Database in depth: teoria relacyjna dla praktyków traktuje ten problem w sposób, który jest dość łatwy do zrozumienia).

„Atomic” nigdy tak naprawdę nie oznaczał „niepodzielny”, dlatego to określenie ostatecznie wypada z łask. Mówiąc luźniej, „atomowa” oznacza, że jeśli wartość ma części składowe, dbms albo ignoruje istnienie tych części, albo zapewnia funkcje do manipulowania nimi. Na przykład wartość znacznika czasu składa się z tych części.

  • Rok
  • Miesiąc
  • Dzień
  • Godziny
  • Minuty
  • Sekundy
  • Milisekundy

Ten rodzaj wartości jest oczywiście podzielny, a wszystkie systemy zarządzania bazami danych zapewniają funkcje do manipulowania tymi częściami. Umożliwiają również wybranie sygnatury czasowej jako pojedynczej wartości. (Co oczywiście tak jest.)

Odpowiedź

„Atomic” odnosi się do pierwotnej koncepcji Codda z 1969 r., każdy atrybut w każdej krotce w ramach relacji powinien składać się z pojedynczej wartości i nie zezwalać na struktury wielowartościowe tego rodzaju, jakie są obsługiwane w bazach danych, takich jak model CODASYL.

We współczesnych SQL DBMS atomowość nie jest tak naprawdę problemem. Tabele SQL nie zezwalają na kolumny wielowartościowe, a wartości są zawsze „niepodzielne”.

Komentarze

  • Technicznie prawda, ale tabele SQL dopuszczają duże ciągi jako wartości , co w praktyce stanowi lukę. Pole tekstowe zawierające kilka liczb całkowitych oddzielonych przecinkami, dat ASCII itp. Z pewnością wydaje się naruszać zasadę atomowości, niezależnie od tego, czy występuje po literze, czy nie ….

Odpowiedź

Atomowa oznacza dane, których nie można dalej podzielić.

Zasada atomowości:

  • reguła 1: kolumna z danymi atomowymi nie może mieć kilku wartości tego samego typu danych w tej samej kolumnie.
  • reguła2: tabela z danymi atomowymi nie może mieć kilku kolumn o tym samym typie danych.

Podobnie jak w kolumnie z pełną nazwą nie można powiedzieć, że może być niepodzielna, ponieważ można ją dalej podzielić na nazwisko, imię. Zainteresowaną kolumnę można również podzielić dalej, więc kolumna, która może ” dzielenie jest znane jako atomowe.

Odpowiedź

Oznacza to, że klucza nie można rozłożyć. Załóżmy, że masz tabelę z trzema kolumnami, imieniem, nazwiskiem i numerem_telefonu. Deklarujesz złożony klucz podstawowy na (imię, nazwisko). Ten klucz podstawowy jest nie atomowy, ponieważ w rzeczywistości jest składa się z dwóch kolumn. Teraz powiedzmy, że zmieniasz tabelę na dwie kolumny, pełna_nazwa i numer_telefonu, z kluczem podstawowym na pełną_nazwa. Czy klucz jest teraz atomowy? Nie, ponieważ w swoim zgłoszeniu można było jeszcze podzielić je na imię i nazwisko na spacji. Teraz zróbmy nasz identyfikator tabeli, imię i nazwisko oraz numer telefonu, klucz podstawowy na identyfikatorze (który jest liczbą całkowitą). To jest niepodzielne, ponieważ liczby całkowitej nie można w znaczący sposób rozłożyć.

Komentarze

  • Twój przykład zaczyna się jednak od stwierdzenia, że atomowość ” oznacza, że klucza nie można rozłożyć „. To ' nie jest tym, co to znaczy. Oznacza to, że atrybuty składają się z jednej wartości. Nie ma nic ” nieatomowy ” o kluczu składającym się z wielu atrybutów.

Odpowiedź

Początkowo Codd miał na myśli, że żadna wartość nie jest zbiorem. Jest to przydatny punkt wyjścia, ale „atomic” nie ma znaczenia ontologicznego, jeśli chodzi o bazy danych (coś, co CJ Date ma rację aby zwrócić uwagę) Codd próbował sformalizować definicję jako coś, czego nie można dalej rozłożyć poza specyfikacją ial operacje na bazie danych (np. sygnatura czasowa jest niepodzielna, ponieważ wyodrębnienie roku jest specjalną operacją w bazie danych). Innymi słowy, jeśli baza danych może wydzielić wartości podrzędne, to jest w porządku. Ale nie powinieneś mieć zestawów (nieuporządkowanych list) ani obiektów, które wymagają logiki aplikacji, aby się zepsuć.

Z biegiem czasu i zmaganiem się z tym problemem w środowiskach operacyjnych zaproponowałbym pośrednią definicję atomowości, jedną bardziej rygorystyczną niż Codd i bez króliczej dziury, o której mówi Date:

Wartość jest niepodzielna dla celów pierwszej postaci normalnej wtedy i tylko wtedy, gdy:

  1. Wartość nie jest zbiorem (tak, Wiem, że data się nie zgadza) i
  2. Nie ma odniesień do kluczy obcych do żadnej części pola.

W szczególności reprezentacja wartości nie może określić jej atomowości. Reprezentowanie adresu IP jako „10.0.0.1” w porównaniu z ARRAY [10,0,0,1] i 167772161 nie ma znaczenia dla analizy 1NF, ponieważ wszystkie trzy odnoszą się do tej samej wartości atomowej.

W szczególności (i czasami przydatne!) Naruszenia 1NF dotyczące niepodzielności obejmują:

  1. Przechowywanie tablicy tagów we wpisie lub komentarzu na blogu.
  2. Przechowywanie tabel w tabelach, gdzie tabela wewnętrzna ma wymóg więzów integralności względem innej relacji w innym miejscu.

Te problemy generują mniej więcej te same anomalie danych.

Odpowiedź

Weź pod uwagę miejsce na Ziemi. Mogę go znaleźć z parami (długość i szerokość geograficzna) lub z kodem HTM (Hierarchical Triangular Mesh). Ponieważ obaj mierzą te same dane. To jest fakt fizyczny, który możemy zmierzyć telefonem komórkowym; tłumaczy liczbę siatki na [długość, szerokość] dla ciebie), oba muszą być atomowe lub złożone w twoim modelu.

Nie należy mylić skali używanej do pomiaru i notacji używanej do wyświetlania danych z charakter danych.

Komentarze

  • Zredagowałem ten post z powodu kilku literówek. Nie ' nie wierzę, że ten użytkownik to prawdziwy Joe Celko, ale szukałem podszywania się na meta.stackexchange.com i znalazłem to wątek . Sprawdź odpowiedzi panów Atwood i Spolsky, założycieli stackexchange. Wydaje się, że jest to dopuszczalne.

Odpowiedź

Klucz atomowy to ten rodzaj klucza podstawowego, którego nie można rozłożyć. oznacza, że ten klucz nie jest dalej dzielony, np. Student_ID, Employee_ID.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *