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

MySQL PRIMARY KEY a ograniczenia UNIQUE

Na wstępie zauważ, że klucz podstawowy nie musi być pojedynczą kolumną:może składać się z wielu kolumn:jest to znane jako klucz złożony. Pamiętaj też, że nie każda tabela ma AUTO_INCREMENT /IDENTITY w ogóle kolumna i możesz mieć UNIQUE i tak ograniczenie do pojedynczej kolumny wewnątrz klucza złożonego.

  1. Nie ma - ale nie ma sensu, aby DBMS zabronił taka nadmiarowość albo dlatego, że potrzebujesz dodatkowej logiki i złożoności, aby poradzić sobie z tym warunkiem, podczas gdy nie ma żadnej szkody wyrządzonej przez posiadanie obu (oprócz wpływu na wydajność konieczności utrzymywania dwóch indeksów).

  2. Jak wspomniano powyżej:ponieważ koszt alternatywny wykrywania i zapobiegania nadmiarowości nie jest tego warte.

Inną rzeczą do rozważenia jest to, że definicja klucza podstawowego tabeli nie jest niezmienna i dlatego może ulec zmianie. Tabela może już zawierać kolumny z oznaczeniem UNIQUE po ustawieniu ograniczeń, a następnie projektant bazy danych decyduje się uwzględnić to w nowej definicji klucza podstawowego - byłoby nieprzyjazne dla użytkownika wymagać, aby najpierw usunięto stare ograniczenie, zwłaszcza jeśli inne części ich systemu aplikacji zależą od to ograniczenie UNIQUE istnieje (np. 1:0..1 definicja relacji).

(Również AUTO_INCREMENT nie wyklucza się wzajemnie z UNIQUE lub PRIMARY KEY :możesz użyć AUTO_INCREMENT z nieunikalnymi kolumnami (np. jeśli AUTO_INCREMENT jest dodawany po tym, jak tabela zawiera już dane) i odwrotnie, PRIMARY KEY może używać unikalnych wartości pochodzących z innych źródeł, takich jak inna kolumna tożsamości jako klucz obcy (złożone klucze podstawowe mogą zawierać klucze obce!) lub „naturalne” źródło danych, takie jak używanie amerykańskiego numeru ubezpieczenia społecznego jako klucza podstawowego (oczywiście powinieneś nigdy zrób to w rzeczywistości)).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego prosty kod mysql++ kompiluje się samodzielnie, ale nie w projekcie?

  2. TIMESTAMPADD() Przykłady – MySQL

  3. Określ, który plik konfiguracyjny MySQL jest używany

  4. Czy możemy ograniczyć liczbę wierszy w tabeli w MySQL?

  5. Gettext lub tłumaczenie bazy danych