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

Czy mój stół wymaga większej normalizacji?

Normalizacja wymaga znajomości zależności funkcjonalnych (FD) i zależności łączenia (FD). Nie dałeś ich.

Twoja aplikacja Możemy powiedzieć Ci o FD i JD tylko wtedy, gdy wiemy dokładnie, co jest „związkiem, który chciałem wyrazić” (tj. predykat) dla każdej tabeli (tj. do momentu, w którym moglibyśmy spojrzeć na sytuację i wiedzieć dla każdego możliwego wiersza, czy tworzy prawdziwą propozycję z predykatu i dlatego należy do tabeli) i dokładnie jakie możliwe sytuacje mogą się pojawić (poprzez „reguły biznesowe” dotyczące możliwych sytuacji aplikacji, równoważne ograniczeniom możliwych stanów bazy danych).

Twoje „klucze” Nie dałeś FDs. Podałeś tylko jeden kandydujący klucz (CK) i „unikalny klucz”. Ale nie możesz określić niektórych lub wszystkich CK bez znajomości pewnych rzeczy o FD. Więc kiedy dajesz CK, jest to równoznaczne z powiedzeniem, że istnieją i nie są pewne FD. Musisz nam powiedzieć, co nam przekazałeś, gdy podajesz zestaw kolumn oznaczonych PK lub „unikalny klucz”:Czy „unikalny klucz” to CK (nie zawierający żadnego mniejszego unikalnego podzbioru) czy po prostu superklucz (unikalny)? Czy dałeś wszystkie CK, czy mogą być inne? Czy mogą istnieć inne superklucze niż nadzbiory podanych? Najbardziej pomocne jest, jeśli po prostu powiesz nam, które FD są Twoje (poprzez minimalną osłonę), a które nie.

Domysły
Nie mam pojęcia, co is_calculated dotyczy.
Może podana date i meal para ma dokładnie jedną content ?

TL;DR Naprawdę musisz sprawdzić każdy możliwy zestaw kolumn, aby zobaczyć, czy funkcjonalnie determinuje każdą inną kolumnę. To znaczy, czy dla każdego stanu bazy danych podwiersz wartości dla zestawu kolumn pojawia się tylko z jedną wartością dla kolumny. Możemy tylko zgadywać bez jasnego zrozumienia twoich predykatów i twojej aplikacji. Możesz ograniczyć pracę w następujący sposób:Jeśli zbiór kolumn jest unikalny, to jego nadzbiory określają wszystkie inne kolumny. Jeśli zestaw kolumn jest minimalnie unikalny (jest to CK), to żaden z jego mniejszych podzbiorów nie określa wszystkich pozostałych kolumn. Można szukać kontrprzykładów dla domniemanych FD, gdzie dwa wiersze mogą mieć ten sam podwiersz wartości dla domniemanego wyznacznika, ale różne wartości dla domniemanego określonego atrybutu. Aksjomaty Armstronga generują wszystkie FD wynikające z danych.

JD Normalizacja do 4NF i 5NF polega na podzieleniu tabeli na wiele tabel w celu wyeliminowania JD, które nie są implikowane przez CK. Predykat tabeli może być wyrażony jako AND innych dokładnie wtedy, gdy JD przechowuje odpowiadające zestawom kolumn predykatów. Relacja jest w 5NF, gdy każda koniunkcja w każdym JD nakłada się na inną na co najmniej CK. (Algorytm członkostwa Fagina.)

PS Jeśli zależy Ci na ograniczeniach, czy straciłeś jeden, przechodząc z jednego stołu na dwa?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwertuj sekundy na dni, godziny, minuty, sekundy (MySQL)

  2. VB.NET:Pobierz obraz (blob) z bazy danych MySQL

  3. Jak przekonwertować znacznik czasu na datę i godzinę w MySQL?

  4. Błąd MySQL podczas edycji produktu w Magento

  5. PHP wykrywa próbę wstrzyknięcia SQL