FOREIGN KEYS
po prostu upewnij się, że Twoje dane są spójne.
Nie poprawiają zapytań w sensie wydajności, po prostu powodują, że niektóre błędne zapytania kończą się niepowodzeniem.
Jeśli masz taki związek:
CREATE TABLE department (id INT NOT NULL)
CREATE TABLE employee (id INT NOT NULL, dept_id INT NOT NULL, FOREIGN KEY (dept_id) REFERENCES department(id))
, nie możesz usunąć pliku, department
jeśli ma jakieś pliki employee
.
Jeśli dostarczamy ON DELETE CASCADE
do FOREIGN KEY
definicji, powoływanie wiersze zostaną automatycznie usunięte wraz z przywoływanych nich.
Jako ograniczenie, FOREIGN KEY
faktycznie trochę spowalnia zapytania.
Podczas usuwania z tabeli, do której istnieje odniesienie lub wstawiania do tabeli, do której istnieją odniesienia, należy przeprowadzić dodatkowe sprawdzenie.
JOIN
może być znacznie mniej wydajna niż dwa DELETE używające FULL TABLE SCANGłówne korzyści wynikające z używania prawdziwych kluczy obcych to zapewnienie integralności danych i możliwość skonfigurowania kaskadowych działań na powiązanych elementach, gdy coś zostanie zmodyfikowane lub usunięte.
Na przykład wyobraź sobie, że programujesz forum. Masz tabelę „tematy” z kluczem głównym
topics.topic_id
i tabelę „posty”, w której posty są dołączone do tematów z kolumnąposts.topic_id
, która jest kluczem obcym do tabeli tematów.Ta relacja z kluczem obcym zapewnia, że każdy post jest dołączony do prawidłowego tematu. Jeśli jedyny temat, który posiadasz, ma ID # 1, nie może istnieć post w bazie danych dołączony do tematu # 2. Baza danych zapewnia to.
Aby uzyskać korzyści kaskadowe, możesz ustawić to tak, aby w przypadku usunięcia tematu z tabeli tematów baza danych automatycznie usuwała wszystkie posty w tabeli wiadomości, które były dołączone do tego tematu. Jest to przyjemne, ponieważ usuwa krok, o którym musisz pamiętać, aby wykonać go ręcznie, co może być dość skomplikowane, gdy masz wiele połączonych ze sobą tabel. Za pomocą kluczy obcych wszystkie relacje można wyczyścić automatycznie.
źródło
1. KLUCZE OBCE - po prostu upewnij się, że dane są spójne
2. Jeśli zastosujemy kaskadę usuwania do definicji klucza obcego, wiersz odniesienia zostanie usunięty automatycznie, gdy zostanie usunięty wiersz nadrzędny.
3. Jeśli zastosujemy Update Cascade do definicji klucza obcego, wiersz podrzędny zostanie zaktualizowany automatycznie po zaktualizowaniu wiersza nadrzędnego.
Zapytanie: ALTER TABLE child ADD FOREIGN KEY (parent_id) REFERENCES rodzic (id) ON UPDATE CASCADE ON DELETE CASCADE;
źródło
Główną zaletą jest to, że można ograniczyć wartości, które można wprowadzić do tabeli; jeśli spróbujesz wprowadzić wartość, której nie ma w tabeli, do której się odwołujesz, nie będziesz w stanie tego zrobić.
Ponadto, jeśli zaktualizujesz lub usuniesz wartość w tabeli, do której się odwołujesz, możesz ustawić automatyczną aktualizację wartości lub kaskadowe usuwanie dowolnego wiersza zawierającego tę wartość.
To naprawdę świetna funkcja wykorzystująca twój kod.
źródło