Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: FOREIGN KEY - o co w tym chodzi?
Forum PHP.pl > Forum > Bazy danych > MySQL
acainoks
Witam chciałbym się dowiedzieć po co daję się w tabeli FOREIGN KEY w czym pomaga a w czym przeszkadza. Nie proszę tutaj o link do manuala tylko chciałbym się dowiedzieć tego od ludzi którzy jakoś to sobie już wytłumaczyli i pomogą zrozumieć te zagadnienie mnie. Dziękuję i pozdrawiam.
Wilk002
W dwóch słowach klucz obcy jest kluczem podstawowym innej tabeli. Szkolny przykład:
tabela uczniowie ma swój klucz podstawowy id_ucznia, tabela oceny ma swój klucz podstawowy id _ocena oraz id_ucznia jako kolejną kolumnę będąca kluczem obcym. Chodzi żeby połączyć w jakiś sposób dwie tabele ze sobą.
acainoks
i na czym te połączenie polega? jak byłaby różnica gdyby id_ucznia w tabeli ocena nie był zdefiniowany jako klucz obcy tylko jako zwykła kolumna?
Mchl
Cytat(Wilk002 @ 15.02.2010, 22:29:16 ) *
W dwóch słowach klucz obcy jest kluczem podstawowym innej tabeli.


Zazwyczaj, ale niekoniecznie.

Tak jak Wilk pisze, klucze obce wiążą ze sobą (tworzy relacje) tabele w bazie danych (relacyjnej, bo takie bazy danych tworzymy w MySQL).

http://www.centrumxp.pl/dotNet/299,1,06_Kl...wne_i_obce.aspx
(Uwaga, artykuł o MSSQL - podstawy teoreryczne te same, szczegóły implementacji mogą być inne)


Aplikacje pisane w PHP rzadko korzystają z kluczy definiowanych w samej bazie danych (przez klauzulę FOREGIN KEY), ale tą samą funkcjonalność mają zazwyczaj zapisaną w samym kodzie aplikacji. Wynika to z tego, że wciąż bardzo popularnym silnikem bazodanowym w MySQL jest MyISAM, który tej klauzuli nie obsługuje (obsługuje klauzulę REFERENCES, ale ma ona funkcję czysto dokumentacyjną). Dopiero InnoDB (inny silnik dostępny w MySQL) daje rozbudowane funkcjonalności kluczy obcych, takie jak kaskadowe uaktualnienia, czy kasowania.
Wilk002
Zgadzam się z przedmówcą. Co do pytania o połączenie to służą do tego JOINy (LEFT, JOIN, RIGHT JOIN). Bardzo ogólnikowo mówiąc chodzi kolumna z kluczem obcym przechowywała dane o kluczu podstawowym z innej tabeli. W prostych bazach nie jest raczej używana struktura strikto klucza obcego, zazwyczaj jest to kolumna umowna.
acainoks
Wielki dzięki za przybliżenie tego tematu pozdrawiam
PawelBah
A więc pojawia się pytanie. Czy warto zmieniać MyISAM na innoDB aby móc korzystać z pełnej obsługi kluczy obcy np. przy usuwaniu kaskadowym? Czy lepiej jest stworzyć 3 zapytania DELETE FROM?
Mchl
Tylko z tego powodu? Raczej nie warto. InnoDB ma jednak inne ważne funkcjonalności winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.