Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> FOREIGN KEY - o co w tym chodzi?
acainoks
post
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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Wilk002
post
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ą.
Go to the top of the page
+Quote Post
acainoks
post
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?
Go to the top of the page
+Quote Post
Mchl
post
Post #4





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Wilk002
post
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.
Go to the top of the page
+Quote Post
acainoks
post
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
Go to the top of the page
+Quote Post
PawelBah
post
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?
Go to the top of the page
+Quote Post
Mchl
post
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 winksmiley.jpg
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 14:31