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

Klucz obcy dla wielu tabel i kolumn?

Nie musisz podawać nazwy pozycji w obu tabelach. Nazywa się to rozwiązaniem zdenormalizowanym. Powinieneś mieć to tylko w tabeli elementów i odnosić się tylko do identyfikatora, wtedy jeśli potrzebujesz nazwy również możesz dołączyć do niej na podstawie klucza podstawowego (id). W przeciwnym razie jest całkowicie OK w moim opinia.

CREATE TABLE user(
  id INT(11) NOT NULL AUTO_INCREMENT,
  username VARCHAR(50) NOT NULL,
  password VARCHAR(20) NOT NULL,
  PRIMARY KEY (id)
);

CREATE TABLE items(
  i_id INT(11) NOT NULL AUTO_INCREMENT,
  name TINYTEXT NOT NULL,
  price DECIMAL(8,2) NOT NULL,
  PRIMARY KEY (i_id)
);

CREATE TABLE user_purchase(
  i_id INT(11) NOT NULL,
  name TINYTEXT NOT NULL,
  id INT(11) NOT NULL,
  FOREIGN KEY (i_id) REFERENCES items(i_id),
  FOREIGN KEY (id) REFERENCES user(id)
);

Czasami, gdy wydajność jest krytyczna, musisz użyć zdenormalizowanych tabel. To może być znacznie szybsze.

Normalizacja jest ważna, aby uniknąć różnych anomalii. Jeśli masz tabele w normalnej formie wysokiego poziomu, Twoje tabele nie będą zbędne i nie będą miały tych anomalii. Na przykład, jeśli masz coś przechowywanego w wielu lokalizacjach, musisz dbać o to, aby wszystkie nadmiarowe dane były aktualne. Daje to szansę na zrobienie tego niepoprawnie, co może skończyć się różnymi anomaliami.

W Twojej sytuacji posiadanie klucza obcego pomaga zachować integralność danych, ale bez klucza obcego dla nazwy możesz mieć pozycje z nazwami w zakupach, których nie ma w tabeli pozycji.

To rodzaj anomalii.

Jest ich wiele, najlepiej unikać ich tak długo, jak to możliwe.

Więcej informacji o anomaliach znajdziesz tutaj

W niektórych przypadkach musisz denoramalizować. Dlatego przechowuj niektóre dane nadmiarowo z powodu problemów z wydajnością. W ten sposób możesz zaoszczędzić niektóre operacje łączenia, które mogą zająć dużo czasu.

Szczegóły normalizacji są omówione w tematach o różnych formach normalnych:NF0, NF1, NF2, NF3 i BCNF

Szczegóły dotyczące normalnych formularzy

Więcej szczegółów na temat matematycznych podstaw bezstratnej dekompozycji do wyższych postaci normalnych można znaleźć w „Zależności funkcjonalne”. Pomoże ci to zrozumieć, dlaczego możesz zachować „zbędne” identyfikatory. Praktycznie są one niezbędną redundancją, ponieważ są potrzebne, aby móc później odbudować oryginalny zbiór danych. To będzie definicja różnych form normalnych. Jaki poziom nadmiarowości jest dozwolony?

Zależności funkcjonalne



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL wybierz odrębny

  2. Wybierz ostatni rekord z prawej tabeli podczas korzystania z join w mysql

  3. Używanie libmysqlclient w aplikacji wielowątkowej

  4. PHP/MYSQL Dołącz do wielu stołów

  5. MySQL:Ignoruj ​​wybraną kolumnę podczas używania DISTINCT