GRY-Online.pl --> Archiwum Forum

Klucze obce - o co w tym chodzi? [SQL]

13.10.2007
12:26
smile
[1]

Telemach [ Pretorianin ]

Klucze obce - o co w tym chodzi? [SQL]

Załóżmy, że mam dwie tabele:

Users:
- user_id (klucz główny, autonumeracja)
- user_name
- user_mail

Articles:
- article_id (klucz główny, autonumeracja)
- user_id
- article_name
- itd, itp

Teraz jak tworzę zapytanie w edytorze zapytań (Query Editor) i wrzucam te dwie tabele, to automatycznie jest tworzona między nimi relacja (taki wężyk :P).

Moje pytanie - po co są te klucze obce?
Jak mam je zdefiniować? Czemu one służą?
Wiem tyle, że kluczem obcym w tabeli Articles powinien być user_id, ale jak go zdefiniować?

Obcuję w środowisku SQL Server 2005 :)

13.10.2007
12:55
[2]

ElNinho [ Konsul ]

W wielkim skrócie klucz obcy wskazuje na wartości klucza głównego w innej (bądź tej samej) tabeli. W Twoim przypadku user_id w tabeli Articles jest kluczem obcym wskazującym klucz główny w tabeli Users, a po naszemu mówiąc, dzięki temu możesz w łatwy sposób dowiedzieć się, kto jest autorem artykułu, jak również sprawdzić, jakie artykuły napisał dany autor.

Przykładowo gdy user_id = 99 wtedy zapytanie select * from Articles where user_id = 99 zwróci Ci wszystkie artykuły napisane przez usera 99

13.10.2007
13:17
[3]

Telemach [ Pretorianin ]

Ok, rozumiem.
Ale czy takie zdefiniowanie jak pokazałem powyżej - czyli tabele z tymi kolumnami to już wszystko?
Bo mam jeszcze opcje w menadżerze SQL Server kluczy - tam można jeszcze jakieś klucze ustawiać :)

13.10.2007
16:14
[4]

ElNinho [ Konsul ]

no nie wystarczy, bo tabela musi "wiedzieć" że to klucz jest a nie zwykła kolumna - powiązanie za pomocą klucza obcego (foreign key constraint) zapewnia m.in. również to, że do tabeli Articles nie dodasz rekordu z user_id nie istniejącym w tablei Users

rzuć okiem na ten link może coś Ci pomoże (na dole również odnośnik do Creating and Modifying FOREIGN KEY Constraints)

© 2000-2024 GRY-OnLine S.A.