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

Projekt DB:tabela członków oddzielna lub wszystkie w jednej tabeli?

Dużo zależy od tego, jakie są te „inne” szczegóły. To częste i interesujące pytanie, na które na pierwszy rzut oka nie ma „twardej i szybkiej” odpowiedzi. Ale jeśli pomyślimy o problemie bardziej abstrakcyjnie, o rzeczywistej relacji między atrybutami („szczegółami”) jakiejkolwiek konkretnej rzeczy, którą chcesz przedstawić, możemy znaleźć pewną jasność.

W swoim pytaniu stwierdzasz, że znajomi mają „minimalne” i „inne” dane. Zamiast klasyfikować te szczegóły jako „minimalne” lub „inne”, sklasyfikujmy je według tego, czy jakikolwiek indywidualny („atomowy”) szczegół może być w pełni określony przez to, co czyni przyjaciela wyjątkowym.

Przypuszczam, że istnieje jakiś klucz podstawowy (PK), taki jak FriendID, adres e-mail czy coś takiego. Biorąc pod uwagę ten unikalny identyfikator, zadaj sobie pytanie:„Jeśli otrzymam dokładnie jeden FriendID (lub adres e-mail lub cokolwiek, którego używasz jako PK), jakich szczegółów tego znajomego jestem absolutnie pewien? Np. biorąc FriendID=2112, absolutnie znam imię, nazwisko i datę urodzenia tego przyjaciela, ale nie absolutnie znać numer telefonu tego przyjaciela, ponieważ jest ich więcej niż jeden.

Zgrupuj w jednej tabeli wszystkie szczegóły, które jednoznacznie znasz, biorąc pod uwagę PK. Umieść szczegóły, dla których potrzebujesz więcej danych (np. „dom” lub „praca” w przypadku numerów telefonów) w tabelach „dziecko”, z powrotem z kluczem obcym do tabeli „rodzic” na PK. (Uwaga:jest bardzo prawdopodobne, że PK tabeli podrzędnej będzie złożony, to znaczy złożony z PK tabeli nadrzędnej i czynnika różnicującego (takiego jak „dom” lub „praca” w tym przykładzie).Klucze złożone dla wielu stron relacji 1-M są bardzo dobre.)

Maniacy baz danych nazywają tę dekompozycję na podstawie zależności funkcjonalnych .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmiana roku w mysql date

  2. MySQL Wstawić do wielu tabel? (Normalizacja bazy danych?)

  3. Napraw ostrzeżenie MySQL 1287:„BINARY expr” jest przestarzałe i zostanie usunięte w przyszłej wersji

  4. Left Join nie zwraca wszystkich wierszy

  5. Jak obliczyć sumę dwóch kolumn z dwóch różnych tabel bez klauzuli gdzie?