Articles

Zrozumienie kluczy głównych MySQL

Klucze główne służą jako unikalne identyfikatory rekordów w tabeli, podczas gdy klucze obce są używane do łączenia ze sobą powiązanych tabel. Podczas projektowania tabel ważne jest, aby określić, które pola będą używane jako klucze główne i obce, aby wyjaśnić strukturę tabeli oraz relacje między tabelami.

Klucze główne

Możesz określić klucz główny dla tabeli za pomocą ograniczenia PRIMARY KEY. W dobrze zaprojektowanym schemacie bazy danych, klucz główny służy jako niezmienny, unikalny identyfikator każdego rekordu. Jeśli klucz jest zadeklarowany jako główny, oznacza to, że wartości w nim zawarte będą rzadko modyfikowane.

Klucz PRIMARY jest połączeniem ograniczeń NOT NULL i UNIQUE, ponieważ wymaga, aby wartości w określonym polu nie miały wartości NULL ani nie powtarzały się w żadnym innym wierszu. Rozważmy następujący przykład, który demonstruje poprzez ustawienie numerycznego polaAirportID jako klucz główny dla tabeli lotnisko.

mysql> CREATE TABLE airport ( -> AirportID smallint(5) unsigned NOT NULL, -> AirportCode char(3), -> AirportName varchar(255) NOT NULL, -> CityName varchar(255) NOT NULL, -> CountryCode char(2) NOT NULL, -> NumRunways INT(11) unsigned NOT NULL, -> NumTerminals tinyint(1) unsigned NOT NULL, -> PRIMARY KEY (AirportID) -> ) ENGINE=MYISAM;Query OK, 0 rows affected (0.05 sec)

W tej sytuacji, ponieważ pole AirportID jest zdefiniowane jako klucz główny, MySQL nie pozwoli na duplikację lub wartości NULL w tym polu. Dzięki temu administrator bazy danych może zapewnić, że każde lotnisko w tabeli ma unikalną wartość liczbową, co zapewnia wysoki stopień spójności przechowywanych danych.

Klucz główny może być określony zarówno dla pojedynczego pola jak i dla kombinacji wielu pól. Rozważmy następujący przykład, który demonstruje konstrukcję tabeli zawierającej złożony klucz główny:

mysql> CREATE TABLE flightdep ( -> FlightID SMALLINT(6) NOT NULL, -> DepDay TINYINT(4) NOT NULL, -> DepTime TIME NOT NULL, -> PRIMARY KEY (FlightID, DepDay, DepTime) -> ) ENGINE=MyISAM;Query OK, 0 rows affected (0.96 sec)

W tym przypadku, reguły tabeli pozwalają na powtórzenie numeru lotu, dnia wylotu lub godziny wylotu, ale nie wszystkich trzech razem. Zobacz, co się stanie, jeśli spróbujesz:

mysql> INSERT INTO flightdep (FlightID, DepDay, DepTime) -> VALUES (511,1,'00:01');Query OK, 1 row affected (0.20 sec)mysql> INSERT INTO flightdep (FlightID, DepDay, DepTime) -> VALUES (511,2,'00:01');Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO flightdep (FlightID, DepDay, DepTime) -> VALUES (511,1,'00:02');Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO flightdep (FlightID, DepDay, DepTime) -> VALUES (511,1,'00:01');ERROR 1062 (23000): Duplicate entry '511-1-00:01:00' for key 'PRIMARY'

Kompozytowe klucze główne mogą być przydatne, gdy rekord ma być jednoznacznie identyfikowany przez kombinację jego atrybutów, a nie przez pojedynczy atrybut.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *