różnica między kluczem podstawowym a kluczem unikatowym


252

Korzystam z bazy danych mysql. Mam pomyłkę między kluczem podstawowym a kluczem unikatowym.

Pomóż mi, gdzie powinienem utworzyć klucz podstawowy i unikalny. Mam na myśli, w której sytuacji tworzymy unikalny klucz lub klucz podstawowy.


9
wrt null-zdolność dobrym sposobem na rozróżnienie PRIMARY KEY = UNIQUE KEY + Not Null CONSTRAINT
czarno

Odpowiedzi:


233

Klucz podstawowy:

  • W tabeli może znajdować się tylko jeden klucz podstawowy
  • W niektórych DBMS tak nie jest NULL- np. MySQL dodajeNOT NULL
  • Klucz podstawowy to unikalny identyfikator klucza rekordu

Unikalny klucz:

  • Może być więcej niż jednym unikalnym kluczem w jednej tabeli
  • Unikalny klucz może mieć NULLwartości
  • Może to być klucz kandydujący
  • Unikalny klucz może być NULL; wiele wierszy może mieć NULLwartości i dlatego nie może być uważane za „unikalne”

11
Chcesz również dodać, że ten klucz podstawowy można utworzyć w wielu kolumnach, np. Klucz podstawowy (CustomerID, ProductID). Nazywa się to złożonym kluczem podstawowym. Ma to na celu wyjaśnienie pierwszego punktu, ponieważ może to zająć takie, jakie jest (czytaj jeden klucz => jedna kolumna) przez nowego przybysza do sql:)
Ken 10'14

1
Co masz na myśli mówiąc „może być kluczem kandydującym”?

1
„dozwolony jest tylko pojedynczy null” - to nie jest prawda, przynajmniej nie dla MySQL.
Jānis Elmeris

69
Unikalny klucz może być pusty i może nie być unikalny. Oznacza ?
Pratik

20
@PratikCJoshi Prawdopodobnie oznacza, że ​​może to być wiele wierszy o wartości NULL na unikatowym kluczu.
John

77

Unikalny klucz (Wielka Brytania) : jest to kolumna lub grupa kolumn, które mogą zidentyfikować niepowtarzalność z rzędu.

Primary Key (PK) : To też kolumna lub grupa kolumn, które mogą zidentyfikować unikalność w wierszu.

Tak więc klucz podstawowy to po prostu inna nazwa klucza unikalnego, ale domyślna implementacja w SQL Server jest inna dla klucza podstawowego i unikalnego.

Domyślnie:

  1. PK tworzy indeks klastrowany, a Wielka Brytania tworzy indeks klastrowany.
  2. Wartość PK nie jest równa null, ale Wielka Brytania zezwala na wartości null (Uwaga: domyślnie)
  3. Na stole może znajdować się tylko jedna PK, ale może być wiele brytyjskich
  4. Możesz zastąpić domyślną implementację w zależności od potrzeb.

To naprawdę zależy od tego, jaki jest twój cel przy podejmowaniu decyzji o utworzeniu Wielkiej Brytanii czy PK. Wynika to z analogii: „Jeśli jest zespół trzech osób, więc wszyscy są rówieśnikami, ale będzie jeden z nich, który będzie parą rówieśników: PK i UK mają podobny związek”. Sugerowałbym przeczytanie tego artykułu: Przykład podany przez autora może nie wydawać się odpowiedni, ale spróbuj uzyskać ogólny pomysł.

http://tsqltips.blogspot.com/2012/06/difference-between-unique-key-and.html


przeczytaj około 10 stron internetowych, które mówią, że PK może zawierać więcej niż jedną kolumnę. Więc jak może być jeden i tylko jeden PK na stole?

@android PK z więcej niż jedną kolumną działa jak pojedyncza kolumna ze względu na wyjątkowość. Przynajmniej w PostgreSQL oznacza to, że nowa [table_name]_pkeytabela ( z domyślną nazwą ) jest dodawana do tabeli (słyszałem, że jest to nazywane kluczem zastępczym). Źródło: postgresqltutorial.com/postgresql-primary-key Jestem nowy w tym wszystkim, więc doceniłbym bardziej kompetentny plakat, aby wskazać niuanse, które przegapiłem.
Poik

Okej, to nie jest kolumna. Źle przeczytałem. To jest przeciwwaga, a nie kolumna. Nadal istnieje indeks klastrowy, ale ma on ponad dwie kolumny zamiast jednej. I każda kolumna w nim sama nie jest kluczem podstawowym, zamiast tego cały zestaw jest kluczem podstawowym. W tych przypadkach nie ma więcej niż jednego PK.
Poik

46

W przypadku organizacji lub firmy istnieje tak wiele podmiotów fizycznych (takich jak ludzie, zasoby, maszyny itp.) I podmiotów wirtualnych (ich zadania, transakcje, działania). Zazwyczaj firma musi rejestrować i przetwarzać informacje o tych podmiotach gospodarczych. Te podmioty gospodarcze są identyfikowane w całej domenie biznesowej za pomocą klucza.

Według prospektywnego RDBMS klucz (zwany również kluczem kandydującym) to wartość lub zestaw wartości, które jednoznacznie identyfikują jednostkę.

W przypadku tabeli DB istnieje tyle kluczy, które mogą kwalifikować się do klucza podstawowego. Aby wszystkie klucze, klucz podstawowy, klucz unikalny itp. Były wspólnie nazywane kluczem kandydującym. Jednak DBA wybrał klucz z klucza kandydata do wyszukiwania rekordów nazywa się kluczem podstawowym.

Różnica między kluczem podstawowym a kluczem unikalnym

1. Zachowanie: Klucz podstawowy służy do identyfikacji wiersza (rekordu) w tabeli, podczas gdy klucz unikalny służy do zapobiegania duplikowaniu wartości w kolumnie (z wyjątkiem wpisu zerowego).

2. Indeksowanie: Domyślnie silnik SQL tworzy Indeks klastrowany na kluczu podstawowym, jeśli nie istnieje, oraz Indeks nieklastrowany na kluczu unikatowym.

3. Nullability: klucz podstawowy nie zawiera wartości Null, podczas gdy klucz unikalny może.

4. Istnienie: Tabela może mieć najwyżej jeden klucz podstawowy, ale może mieć wiele unikalnych kluczy.

5. Modyfikowalność: Nie możesz zmieniać ani usuwać wartości pierwotnych, ale wartości Unikalnego klucza mogą.

Aby uzyskać więcej informacji i przykładów:

http://dotnetauthorities.blogspot.in/2013/11/Microsoft-SQL-Server-Training-Online-Learning-Classes-Integrity-Constraints-PrimaryKey-Unique-Key_27.html


7
W piątym punkcie mówisz, że nie możemy zmienić ani usunąć podstawowych wartości. z pewnością możemy zmienić podstawowe wartości w tabeli za pomocą instrukcji aktualizacji.
Kapil

3
@Kapil robi to więcej niż cel używania klucza podstawowego.
Gokigooooks

2
indeks klastrowany: wiersze są fizycznie przechowywane na dysku w tej samej kolejności co indeks
Duy Đặng

26

Klucz podstawowy musi być unikalny.

Unikalny klucz nie musi być kluczem podstawowym - patrz klucz kandydujący .

Oznacza to, że w tabeli może znajdować się więcej niż jedna kombinacja kolumn, która może jednoznacznie identyfikować wiersz - tylko jedną z nich można wybrać jako klucz podstawowy. Pozostałe, choć unikalne, to klucze kandydujące.


17

Różnica między kluczem podstawowym a kluczem unikalnym

+-----------------------------------------+-----------------------------------------------+
|                Primary Key              |                    Unique Key                 |
+-----------------------------------------+-----------------------------------------------+
| Primary Key can't accept null values.   | Unique key can accept only one null value.    |
+-----------------------------------------+-----------------------------------------------+
| By default, Primary key is clustered    | By default, Unique key is a unique            |
| index and data in the database table is | non-clustered index.                          |
| physically organized in the sequence of |                                               |
| clustered index.                        |                                               |
+-----------------------------------------+-----------------------------------------------+
| We can have only one Primary key in a   | We can have more than one unique key in a     |
| table.                                  | table.                                        |
+-----------------------------------------+-----------------------------------------------+
| Primary key can be made foreign key     | In SQL Server, Unique key can be made foreign |
| into another table.                     | key into another table.                       |
+-----------------------------------------+-----------------------------------------------+

Szczegółowe informacje można znaleźć na stronie :
http://www.dotnet-tricks.com/Tutorial/sqlserver/V2bS260912-Difference-between-Primary-Key-and-Unique-Key.html


16

Klucz podstawowy ma semantyczną identyfikację wiersza bazy danych. Dlatego może istnieć tylko jeden klucz podstawowy dla danej tabeli, podczas gdy może istnieć wiele unikalnych kluczy.

Również z tego samego powodu kluczem podstawowym nie może być NULL (przynajmniej w Oracle, nie jestem pewien co do innych baz danych)

Ponieważ identyfikuje wiersz, nigdy nie powinien się nigdy zmieniać. Zmiana kluczy podstawowych z pewnością spowoduje poważny ból i prawdopodobnie wieczne potępienie.

Dlatego w większości przypadków potrzebujesz jakiegoś sztucznego identyfikatora klucza podstawowego, który nie jest używany do niczego poza identyfikacją pojedynczych wierszy w tabeli.

Z drugiej strony unikalne klucze mogą się zmieniać tak, jak chcesz.


22
+1 za wzmiankę o ryzyku wiecznego potępienia. Czas wprowadzić teologię do teorii relacyjnych baz danych.
Neville Kuyt

PK nie może mieć również wartości NULL w SQL Server
mrd3650

7

Klucz podstawowy jest unikalnym kluczem.

Każda tabela musi mieć co najwyżej JEDEN klucz podstawowy, ale może mieć wiele unikatowych kluczy. Klucz podstawowy służy do jednoznacznej identyfikacji wiersza tabeli. Klucz podstawowy nie może być, NULLponieważ NULLnie jest wartością.


6
  • Pomyśl, że nazwa tabeli jest zatrudniona.
  • Klucz podstawowy
  • Klucz podstawowy nie może przyjmować wartości zerowych. klucz podstawowy wymusza unikatowość kolumny. Możemy mieć tylko jeden klucz podstawowy w tabeli.
  • Unikalny klucz
  • Unikalny klucz może przyjmować wartości zerowe. unikalny klucz wymusza także unikatowość kolumny. możesz pomyśleć, że jeśli unikalny klucz zawiera wartości null, to dlaczego może być unikalny? tak, chociaż może przyjmować wartości null, wymusza unikalność kolumny. wystarczy spojrzeć na zdjęcie. tutaj Emp_ID jest podstawowy, a Citizen ID jest unikalny. Nadzieję, że rozumiecie. Możemy użyć wielu unikalnych kluczy w tabeli. wprowadź opis zdjęcia tutaj

1
nie możemy wstawić więcej niż jednej wartości NULL w kluczu Unique i nie pozwoli to również na duplikaty.
Masum

@ mahedi-hasan Czy kolumna klucza Unique nie powinna mieć tylko jednej wartości NULL? Dlaczego dwa ostatnie wiersze w Citizen ID NULL? Czy coś mi umyka?
supernowa,

Właśnie otrzymałem odpowiedź na mój komentarz powyżej. Wygląda na to, że MySQL zezwala na wiele wartości NULL w unikatach, więc wygląda na to, że @Mahedi_Hasan używał MySQL. stackoverflow.com/questions/3712222/…
supernova

6

Wiem, że to pytanie ma kilka lat, ale chciałbym udzielić odpowiedzi na to wyjaśnienie, a nie jak

Cel klucza podstawowego : jednoznaczna identyfikacja wiersza w bazie danych => Wiersz reprezentuje pojedyncze wystąpienie typu encji modelowane przez tabelę. Klucz podstawowy wymusza integralność jednostki, AKA Entity Integrity. Klucz podstawowy byłby indeksem klastrowym, tzn. Określa kolejność fizycznego przechowywania danych w tabeli.

Cel unikalnego klucza : Ok, dzięki kluczowi głównemu mamy sposób na unikalną identyfikację wiersza. Ale potrzebuję takiej działalności, że inna kolumna / zestaw kolumn powinna mieć unikalne wartości. Technicznie, biorąc pod uwagę, że ta kolumna (kolumny) jest unikalna, może być kandydatem do egzekwowania integralności jednostki. Ale z tego co wiemy, ta kolumna może zawierać dane pochodzące z organizacji zewnętrznej, co do których mam wątpliwości, że jestem wyjątkowa. Nie mogę ufać, że zapewni integralność jednostki. Po prostu sprawiam, że jest to unikalny klucz do spełnienia moich wymagań biznesowych.

Proszę bardzo!


1

Jeśli projekt bazy danych jest taki, że nie wymaga klucza obcego, możesz przejść do klucza unikalnego ( ale pamiętaj, że klucz unikalny pozwala na pojedynczą wartość zerową ).

Jeśli baza danych wymaga klucza obcego, to wychodzisz bez wyboru, musisz iść z kluczem podstawowym.

Aby zobaczyć różnicę między kluczem unikalnym a kluczem podstawowym, odwiedź tutaj


1

Unikatowy klucz: - Należy go używać, gdy trzeba podać niepowtarzalną wartość. W przypadku niepowtarzalnego klucza oznacza to, że dozwolone są również wartości zerowe. Niepowtarzalne klucze to klucze, które są unikalne i nie są podobne w tej kolumnie, jak na przykład imię twojego zwierzaka .it może być niczym null, a jeśli pytasz w kontekście bazy danych, należy zauważyć, że każdy null różni się od innego null w bazie danych. Z WYJĄTKIEM SQL Server gdzie null = null ma wartość true


klucz podstawowy: - Należy go użyć, gdy trzeba jednoznacznie zidentyfikować wiersz. podstawowy to klucz, który jest unikalny dla każdego wiersza w ograniczeniu bazy danych, ponieważ nie pozwala na wartość null. więc mógłbyś zauważyć, że baza danych mają kolumnę, która jest auto-inkrementem i jest kluczem podstawowym tabeli. plus może być użyty jako klucz obcy w innej tabeli. przykład może być orderId w tabeli zamówień , billId w tabeli rachunków .

teraz wracam do sytuacji, kiedy go użyć: -

1) klucz podstawowy w kolumnie, który nie może mieć wartości NULL w tabeli i używasz jako klucza obcego w innej tabeli do tworzenia relacji

2) unikalny klucz w tabeli, który nie wpływa na tabelę lub całą bazę danych, niezależnie od tego, czy weźmiesz wartość null dla konkretnej kolumny, jak przekąski w restauracji, możliwe, że nie bierzesz przekąsek w restauracji


1

różnica między kluczem podstawowym a kluczem unikalnym

Oba Primary keyi Unique Keysłużą do jednoznacznego zdefiniowania wiersza w tabeli. Primary Keytworzy a clustered indexkolumny, podczas gdy a Unique creates an unclustered index of the column.

A Primary Keynie zezwala NULL value, jednak a Unique Keyzezwala one NULL value.


0

Po prostu klucz podstawowy jest unikatowy i nie może być zerowy, unikatowy może być zerowy i może nie być niepowtarzalny.


„unikatowy może być pusty i może nie być unikalny”. Co to may not be uniqueznaczy tutaj?
Yusuf Hassan

0

Klucze podstawowe

Głównym celem klucza podstawowego jest zapewnienie sposobu identyfikacji każdego rekordu w tabeli.

Klucz podstawowy umożliwia identyfikację wiersza przy użyciu danych w wierszu. Klucz podstawowy może być oparty na jednej lub więcej kolumnach, takich jak imię i nazwisko; jednak w wielu projektach kluczem podstawowym jest automatycznie wygenerowany numer z kolumny tożsamości.

Klucz podstawowy ma następujące cechy:

  1. Może istnieć tylko jeden klucz podstawowy dla tabeli.
  2. Klucz podstawowy składa się z jednej lub więcej kolumn.
  3. Klucz podstawowy wymusza integralność encji tabeli.
  4. Wszystkie zdefiniowane kolumny muszą być zdefiniowane jako NOT NULL.
  5. Klucz podstawowy jednoznacznie identyfikuje wiersz.
  6. Klucze podstawowe powodują domyślnie unikatowe indeksy CLUSTERED.

Unikalne klucze

Unikalny klucz jest również nazywany ograniczeniem unikalnym. Można zastosować unikalne ograniczenie, aby zapewnić unikalność wierszy w bazie danych.

Czy nie robimy tego już z kluczem podstawowym? Tak, robimy, ale tabela może zawierać kilka zestawów kolumn, które chcesz wyjątkowy.

W SQL Server unikalny klucz ma następujące cechy:

  1. W tabeli może znajdować się wiele unikalnych kluczy.
  2. Unikalne klucze powodują domyślnie NIEKLUSTEROWANE unikalne indeksy.
  3. Jedna lub więcej kolumn tworzy unikalny klucz.
  4. Kolumna może mieć wartość NULL, ale dozwolona jest jedna NULL na kolumnę.
  5. Unikatowe ograniczenie może odnosić się do ograniczenia klucza obcego.

źródło: tutaj


0

Główne cechy klucza podstawowego to:

Musi zawierać unikalną wartość dla każdego wiersza danych. Nie może zawierać wartości null. Tylko jeden klucz podstawowy w tabeli.

Główne cechy Unikalnego klucza to:

Może także zawierać unikalną wartość dla każdego wiersza danych.

Może także zawierać wartości null.

Wiele unikalnych kluczy w tabeli.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.