Ten przykład pochodzi z w3schools .
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)
Rozumiem, że obie kolumny razem ( P_Id
i LastName
) reprezentują klucz podstawowy tabeli Persons
. Czy to jest poprawne?
- Dlaczego ktoś miałby chcieć użyć wielu kolumn jako kluczy podstawowych zamiast jednej kolumny?
- Ile kolumn może być używanych razem jako klucz podstawowy w danej tabeli?
Odpowiedzi:
Twoje rozumienie jest prawidłowe.
Zrobiłbyś to w wielu przypadkach. Jednym z przykładów jest związek taki jak
OrderHeader
iOrderDetail
. PKOrderHeader
może byćOrderNumber
. PK inOrderDetail
może byćOrderNumber
ANDLineNumber
. Gdyby to był którykolwiek z tych dwóch, nie byłby wyjątkowy, ale połączenie tych dwóch gwarantuje niepowtarzalność.Alternatywą jest użycie wygenerowanego (nieinteligentnego) klucza podstawowego, na przykład w tym przypadku
OrderDetailId
. Ale wtedy nie zawsze łatwo dostrzegasz związek. Niektórzy wolą jeden sposób; niektórzy wolą inną drogę.źródło
Innym przykładem złożonych kluczy podstawowych są tabele asocjacji. Załóżmy, że masz tabelę osób zawierającą zestaw osób i tabelę grupową zawierającą zestaw grup. Teraz chcesz stworzyć relację wiele do wielu na osobę i grupę. Oznacza to, że każda osoba może należeć do wielu grup. Oto, jak wyglądałaby struktura tabeli przy użyciu złożonego klucza podstawowego.
źródło
Przykład W3Schools nie mówi, kiedy należy używać złożonych kluczy podstawowych, a jedynie podaje przykładową składnię przy użyciu tej samej przykładowej tabeli, co w przypadku innych kluczy.
Ich przykład może wprowadzać w błąd, łącząc bezsensowny klucz (P_Id) i naturalny klucz (LastName). Ten dziwny wybór klucza podstawowego mówi, że następujące wiersze są prawidłowe zgodnie ze schematem i są niezbędne do jednoznacznej identyfikacji ucznia. Intuicyjnie nie ma to sensu.
Dalsza lektura: Wielka debata na temat klucza podstawowego lub po prostu Google,
meaningless primary keys
a nawet przeczytaj to pytanie SOFWIW - Moje 2 centy to unikanie wielokolumnowych kluczy podstawowych i używanie pojedynczego wygenerowanego pola identyfikatora (klucza zastępczego) jako klucza podstawowego i dodawanie dodatkowych (unikalnych) ograniczeń w razie potrzeby.
źródło
Używasz klucza złożonego (klucza z więcej niż jednym atrybutem), gdy chcesz zapewnić niepowtarzalność kombinacji kilku atrybutów. Pojedynczy klucz atrybutu nie osiągnąłby tego samego.
źródło
Tak, oba tworzą klucz podstawowy. Szczególnie w tabelach, w których nie masz klucza zastępczego , może być konieczne określenie wielu atrybutów jako unikalnego identyfikatora dla każdego rekordu (zły przykład: tabela zawierająca zarówno imię, jak i nazwisko może wymagać, aby ich kombinacja była wyjątkowy).
źródło
Wiele kolumn w kluczu będzie generalnie działać gorzej niż klucz zastępczy. Wolę mieć zastępczy klucz, a następnie unikalny indeks klucza wielokolumnowego. W ten sposób można uzyskać lepszą wydajność i zachować wymaganą wyjątkowość. A nawet lepiej, gdy zmienia się jedna z wartości w tym kluczu, nie trzeba również aktualizować miliona wpisów podrzędnych w 215 tabelach podrzędnych.
źródło
Twoje drugie pytanie
jest specyficzne dla implementacji: jest zdefiniowane w aktualnie używanym DBMS. [1], [2], [3] Musisz zapoznać się ze specyfikacją techniczną używanego systemu bazodanowego. Niektóre są bardzo szczegółowe, inne nie. Przeszukiwanie sieci pod kątem takich ograniczeń może być trudne, ponieważ terminologia jest różna. Termin złożony klucz podstawowy powinien być obowiązkowy;)
Jeśli nie możesz znaleźć jednoznacznych informacji, spróbuj utworzyć testową bazę danych, aby upewnić się, że możesz oczekiwać stabilnej (i konkretnej) obsługi naruszeń limitów (których należy się spodziewać). Uważaj, aby uzyskać właściwe informacje na ten temat: czasami limity się kumulują i zobaczysz różne wyniki przy różnych układach bazy danych.
źródło
Używanie klucza podstawowego w wielu tabelach jest przydatne, gdy używasz tabeli pośredniej w relacyjnej bazie danych.
Jako przykład użyję bazy danych, którą kiedyś stworzyłem, a konkretnie trzech tabel w tej tabeli. Kilka lat temu stworzyłem bazę danych dla komiksu internetowego. Jedna tabela nosiła nazwę „komiksy” - lista wszystkich komiksów, ich tytuły, nazwy plików graficznych itp. Kluczem podstawowym było „comicnum”.
Druga tabela zawierała „znaki” - ich imiona i krótki opis. Klucz podstawowy znajdował się na „charname”.
Ponieważ każdy komiks - z pewnymi wyjątkami - miał wiele postaci, a każda postać pojawiała się w wielu komiksach, niepraktyczne było umieszczanie kolumny w „postaciach” lub „komiksach”, aby to odzwierciedlić. Zamiast tego stworzyłem trzecią tabelę nazwaną „komiksy” i była to lista postaci, w których komiksy pojawiały się. Ponieważ ta tabela zasadniczo łączyła dwie tabele, potrzebowała tylko dwóch kolumn: nazwa_znaku i liczba_znaków, a klucz podstawowy znajdował się w obu.
źródło
Tworzymy złożone klucze podstawowe, aby zagwarantować niepowtarzalność wartości kolumn, które składają się na pojedynczy rekord. Jest to ograniczenie, które pomaga zapobiegać wstawianiu danych, których nie należy powielać.
tj .: jeśli wszystkie identyfikatory uczniów i numery aktów urodzenia są jednoznacznie przypisane do jednej osoby. W takim razie dobrym pomysłem byłoby utworzenie klucza podstawowego dla osoby w postaci numeru identyfikacyjnego ucznia i numeru aktu urodzenia, ponieważ zapobiegnie to przypadkowemu wstawieniu dwóch osób, które mają różne identyfikatory studentów i ten sam akt urodzenia.
źródło