![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 1 Dołączył: 29.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
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.
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 20 Pomógł: 4 Dołączył: 26.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
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ą. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 1 Dołączył: 29.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
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?
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 20 Pomógł: 4 Dołączył: 26.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
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.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 1 Dołączył: 29.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Wielki dzięki za przybliżenie tego tematu pozdrawiam
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 1.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
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?
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Tylko z tego powodu? Raczej nie warto. InnoDB ma jednak inne ważne funkcjonalności
![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 14:31 |