Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Istniejące praktyki/wytyczne dotyczące tworzenia nieznormalizowanych tabel podczas procesu normalizacji?

TL;DR Musisz postępować zgodnie z opublikowanym algorytmem, aby dokonać dekompozycji do określonej postaci normalnej.

PS Nie dostałeś Artysty z oryginalnej płyty przez normalizację, ponieważ wprowadziłeś nową kolumnę. Ale załóżmy, że stół Artysta ma oczywiste znaczenie. Jak myślisz, dlaczego „znowu nie jest w trzeciej normalnej postaci, o ile to rozumiem”? Jeśli artysta -> rok na oryginalnej płycie CD, to tak samo jest w przypadku Artysty. Ale wtedy {artist} jest, z {artist_id}, CK (kluczem kandydata) Artysty, a Artysta jest w 3NF (i 5NF).

Z oryginalnej wersji pytania i aktualnej, masz proponowaną tabelę bazową na płycie CD z kolumnami cd_id, title, group i year, zawierającymi krotki, gdzie cd cd_id zatytułowany tytuł została wykonana przez grupę grupę który powstał w roku rok . Kolumna cd_id jest unikalna, stąd jest CK. FD {grupa} -> rok również się trzyma.

Normalizacja nie wprowadza nowych nazw kolumn. Zastępuje proponowaną tabelę podstawową innymi, z których każda ma mniejszy podzbiór kolumn, które zawsze łączą się z wartością, jaką miałaby. Normalizacja do BCNF opiera się na FD (zależności funkcjonalne), które są również tym, co określa CK tabeli podstawowej. Więc twoje pytanie nie zawiera rozkładu. Możliwa dekompozycja przypominająca Twoje pytanie, która może mieć określone właściwości lub nie, to tabele z zestawami kolumn {cd_id, title, group} i {group, year}.

Inne FD obowiązują w oryginale. Niektórzy trzymają się z powodu tego, czym są kolumny; niektórzy trzymają się z powodu CK; niektórzy trzymają, ponieważ {grupa} -> rok trzyma; ogólnie rzecz biorąc, niektóre z nich są aktualne, ponieważ wszystkie trzy mają. A może inni trzymają się ze względu na to, jakie krotki mają wejść w relację i jakie sytuacje mogą się pojawić. Musisz decydować o każdej możliwe FD czy to się trzyma.

Oczywiście mogłeś powiedzieć że jedynymi, którzy się trzymają, są ci, którzy muszą wytrzymać w tych okolicznościach. Ale nie powiedziano mi, że jedynym FD, który posiada, jest {grupa} -> rok, ponieważ trywialne FD i każdy nadzbiór CK funkcjonalnie określa każdy zestaw kolumn .

Jedną z definicji 3NF jest to, że relacja jest w 2NF i żadna kolumna niepierwotna nie jest przechodnie funkcjonalnie zależna od jakiegokolwiek CK. (Zauważ, że każdy warunek obejmuje inne definicje.) Jeśli chcesz użyć tego do sprawdzenia, czy twoja relacja jest w 3NF, musisz następnie dowiedzieć się, co wszystkie CK są. Możesz to zrobić najszybciej za pomocą odpowiedniego algorytmu, ale możesz po prostu zobaczyć, które zestawy kolumn funkcjonalnie określają każdą kolumnę, ale nie zawierają mniejszego takiego zestawu, ponieważ są to CK. Następnie sprawdź dwa warunki w definicji.

Jeśli chcesz znormalizować do 3NF, musisz postępować zgodnie z algorytmem dekompozycji do 3NF. Nie wyjaśniasz, jaki proces Twoim zdaniem powinieneś podążać. Ale jeśli nie stosujesz sprawdzonego algorytmu, to dowolne wybrane komponenty mogą, ale nie muszą, zawsze łączyć się z oryginałem i mogą, ale nie muszą, mieć określoną wyższą normalną formę. Zwróć uwagę, że przykłady dekompozycji widziałeś nie są prezentacjami algorytmów dekompozycji .

Definicje NF (forma normalna) podają warunki, które relacja musi spełniać, aby znaleźć się w tym NF. Nie mówią ci, jak rozłożyć bez strat (zachowując FD, jeśli to możliwe) na relacje w wyższych NF. Ludzie opracowali algorytmy tworzenia dekompozycji do poszczególnych NF. (A dekompozycja do danego NF generalnie nie obejmuje pierwszej dekompozycji do niższych NF. Przechodzenie przez niższe NF może w rzeczywistości uniemożliwić generowanie dobrych dekompozycji wyższych NF oryginału, gdy dojdziesz do dekompozycji na wyższą NF.)

Możesz również nie zdawać sobie sprawy, że kiedy niektóre FD są utrzymane, niektóre inne muszą się utrzymać. To ostatnie można określić za pomocą aksjomatów Armstronga z pierwszego. Więc tylko dlatego, że rozłożyłeś się, aby pozbyć się określonego FD, którego obecność narusza określoną NF, nie oznacza, że ​​nie było wielu innych, które go naruszyły, z którymi nie miałeś do czynienia. Mogą być obecne w nowych komponentach. Lub mogą nie być obecne w problematyczny sposób, więc nie „zachowałeś” ich, kiedy tylko było to możliwe, co prowadzi do kiepskich projektów.

Dowiedz się o konkretnych algorytmach NF, a także o NF i samej normalizacji, z podręcznika/kursu/prezentacji na uczelni/uniwersytecie. Wiele z nich jest online.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ASP.NET API:żaden dostawca bazy danych nie został skonfigurowany dla tego DbContext

  2. Błąd Mysql 1452 - Nie można dodać lub zaktualizować wiersza podrzędnego:ograniczenie klucza obcego nie powiodło się

  3. Jak umieścić jedną kolumnę wyników mysql_query w tablicy?

  4. Jak działa funkcja OCTET_LENGTH() w MySQL

  5. Jak uzyskać nazwy wszystkich kolumn dla wszystkich tabel w MySQL?