UWAGA! Promocja dla firm - MICROSOFT OFFICE 365  na 12 miesiecy ZA DARMO! Tylko na CentrumXP.pl!
Wielka promocja Office 365 na CentrumXP.pl!
Do góry Skomentuj

06. Klucze główne i obce

06. Klucze główne i obce

Autor: Grzegorz Chuchra Opublikowano: 4 stycznia 2006 Odsłon: 75 045

Klucze są podstawową koncepcją w teorii relacyjnych baz danych. Zapewniają tabelom możliwość skorelowania ze sobą dwóch lub więcej tabel. Nawigacja w relacyjnej bazie danych zależy od możliwości identyfikacji określonego wiersza w tabeli za pomocą klucza głównego. Artykuł ten poświęcony będzie poświęcony teorii kluczy głównych i obcych oraz zasadom ich działania.

Związek pomiędzy dwoma lub większą ilością tabel to asocjacja (w potocznym bazodanowym języku znana również jako relacja). Asocjacja jest wyrażona za pomocą wartości klucza głównego i kluczy obcych.

Klucz główny - Primary Key, to kolumna lub zbiór kolumn, które w sposób unikalny definiują wiersz w danej tabeli. Klucz obcy jest kolumną lub zbiorem kolumn, który jest kluczem głównym w innej tabeli. Można powiedzieć, że klucz obcy jest kopią klucza głównego z innej tabeli. Asocjacja jest utworzona pomiędzy tabelami poprzez zaznaczenie, iż wartość z jednej tabeli, w której jest kluczem obcym, jest powiązana z wartością z innej tabeli, gdzie jest kluczem głównym. Ważne jest to, iż wartość klucza obcego nie może istnieć bez powiązania z kluczem głównym. Jeśli w tabeli pracowników mamy pole, które jest kluczem głównym w tabeli z państwami, to nie możemy wpisać w nie wartości, która nie istnieje w tabeli państw. Silnik bazy danych nie zezwoli, aby wstawić wartość klucza obcego, który nie posiada odnośnika na klucz obcy.


Teraz, kiedy mamy na czym skupić naszą uwagę, możemy przejść do opisywania krok po kroku poszczególnych struktur i technik pracy z kluczami. Powiemy, co określa klucz główny, co za tym idzie - w jaki sposób odnaleźć pole, które aplikuje do bycia kluczem. Aby utworzyć taki podstawowy model danych możemy posłużyć się następującym algorytmem:

  • identyfikacja pól, które mogłyby się stać kluczami głównymi
  • sprawdzenie poprawności kluczy i związków pomiędzy tabelami
  • przeniesienie kluczy głównych do innych tabel jako klucze obce.

Określenie kluczy głównych

Klucz główny musi unikalnie identyfikować wiersz. Każdy wiersz w naszej tabeli musi mieć wartość która unikalnie go identyfikuje.

Aby zakwalifikować dany atrybut jako klucz główny, musimy sprawdzić, czy posiada następujące własności:

  • musi posiadać wartość dla każdego z wierszy
  • dla każdego z tych wierszy wartość musi być unikalna
  • wartość ta nie może się zmienić, ani nie może zostać usunięta podczas całego funkcjonowania wiersza w tabeli

Jeśli mielibyśmy tabelę z użytkownikami zarejestrowanymi w portalu internetowym, kluczem głównym mógłby być login. Jest unikalny w ramach całej tabeli, a po usunięciu logina użytkownik ulega usunięciu. Kluczem głównym nie mogłoby być nazwisko, gdyż może być wiele osób, które nazywają się Kowalski. A to łamie drugą zasadę, która mówi, iż wartość musi być unikalna.
W niektórych przypadkach możemy mieć kilku kandydatów do klucza głównego. Rozważmy ponownie ten sam przypadek. Przypuśćmy, że mamy dodatkowe informacje o użytkowniku: datę urodzenia, PESEL, email. Wiemy, że unikalne są dwie wartości: PESEL i email. Zatem zarówno jedną i drugą możemy zaproponować na klucz główny w tabeli User. Teraz od nas tylko zależy czy wybierzemy email czy PESEL. Ja osobiście wybrałbym PESEL ponieważ wyszukiwanie w bazach po wartości typu INT (czyli typu całkowitoliczbowego) jest znacznie szybsze, niż po łańcuchu znaków. Jeśli jednak byłby to portal możliwością logowania, trzeba wziąć pod uwagę, że zmuszenie użytkownika, aby przy logowaniu wpisywał PESEL jest trudniejsze niż skłonienie go do wpasania adresu email.

Klucze złożone

Czasem pojedyncza wartość nie wystarczy na jednoznaczne określenie wiersza.

Jeśli chcielibyśmy zapisać oceny z przedmiotów dla danego studenta musielibyśmy zapisać następujące informacje: przedmiot, z którego ocena została wystawiona, studenta któremu ją wystawiamy i samą ocenę. W tym celu należało by stworzyć następującą tabelę.

LessonID

StudentID

Mark

01

01

5

01

02

2

02

01

3

Przyporządkowujemy zajęciom o kluczu głównym 01 i studentowi o kluczu głównym 01 ocenę pięć. Zaś temu samemu studentowi tylko dla innego przedmiotu o kluczu głównym 02 już ocenę trzy. W tym wypadku mamy złożony klucz główny. Ponieważ ani LessonID ani też StudentID pojedynczo nie spełnia wymagań unikalności klucza głównego, musimy zastosować klucz złożony. W tym wypadku kluczem będzie powiązanie LessonID i StudentID. Pojedynczo żaden z nich nie może spełnić tego zadania, ale w sumie unikalnie określają każdy wiersz.

Sprawdzenie poprawności kluczy

Podstawowe zasady zarządzania i identyfikacji kluczy głównych:

  • każda tabela w bazie danych powinna posiadać klucz główny unikalnie identyfikujący wiersz.
  • klucz główny nie może być opcjonalny. Czyli nie może posiadać wartości nieokreślonej.
  • klucz główny nie może się powtarzać. Może być co najwyżej jedna wartość atrybutu klucza głównego w danej tabeli.

Sprawdzenie poprawności kluczy

Klucze obce są polami, które umożliwiają zachowanie związku pomiędzy identyfikatorem w tabeli, a tabelą, z której wartość ta się wywodzi. Klucze obce umożliwiają zarządzanie integralnością i spójnością danych. Każda asocjacja w bazie powinna być opatrzona kluczem obcym.

W przykładzie ze złożonym kluczem głównym mieliśmy do czynienia z dwoma kolumnami LessonID oraz StudentID. Jeśli zobaczylibyśmy, jak to wygląda w szerszym kontekście, moglibyśmy wyciągnąć bardzo ciekawy wniosek. LessonID i StudentID są kluczami obcymi z tabel Lesson i Student. Ponieważ za pomocą LessonID możemy pobrać informacje o tym, jakiej lekcji dotyczy LessonID 01, zaś z tabeli Student możemy wybrać informacje o osobie, do której StudentID jest przyporządkowane.
To jest właśnie istota kluczy. Nie musimy przechowywać wartości pola, wystarczy nam sam klucz. Za pomocą jego unikalnej wartości możemy bez problemu wyciągnąć interesującą nas wartość.

Podsumowanie

Klucze główne i klucze obce są podstawą teorii relacyjnych baz danych. Każda z tabel powinna mieć kolumnę lub kolumny, na które można nałożyć klucz główny jednoznacznie określający każdy z wierszy. Każda tabela wykorzystująca w jakiś sposób dane z innych tabel powinna być powiązana z nią za pomocą klucza obcego

Zobacz również

Komentarze

strasznie niechlujnie napisane... proponuje zrobić rewizję tekstu - dotyczycy całego kursu a nie tylko tego działu.
vandalizmo, 30 sierpnia 2006, 15:44
eee dobrze jest
stasio, 18 maja 2007, 13:54
masakra... do tej pory nie miałem pojęcia że o rzeczach prostych można pisać tak trudno.
bayliss, 18 czerwca 2007, 14:11
jak ktoś wie o co chodzi nic więcej się nie dowie, jak ktoś nie wie o co chodzi to też nic więcej się nie dowie. ;)
f, 19 czerwca 2007, 13:07
"masakra... do tej pory nie miałem pojęcia że o rzeczach prostych można pisać tak trudno" eeee tam nie jest trudno napisane ... jak ktośnic nie wie to się dowie z tego artykułu moim zdaniem, a jak ktoś wie to sobie powtórzy raz jeszcze, albo nie będzie czytać i już
zosh, 25 lipca 2007, 17:20
krotko i na temat . tak 3mac :)
Rafal, 3 sierpnia 2007, 22:15
mnie osobiście się podoba ewentualnie można by dodać troche przykladów ale ogólnie ok
Tomek, 10 września 2007, 13:28
Tomek ma rację, trochę błędów redakcyjnych tekstu, ale na początek nauki jest ogólnie ok.
corleonis, 15 września 2007, 08:48
Proste świetnie napisane.
Brodi, 22 września 2007, 09:19
Dobrze napisane. Co prawda wiem o czym czytałem bo znam te sprawy, jednak uważam, że bardziej prosto już nie można tego wyjaśnić. Przydał by się przykład tego, że dwa klucze obce tworzą po złożeniu klucz w innej tabeli. Jest to co prawda zaznaczone, ale nie wyjaśnione.
Piotr, 23 września 2007, 18:38
Pesel to zły pomysł. Zawsze ktoś mógłby dodać do bazy pesel, który nie jest jego (czyli nie jest prawdziwy).
Krystian, 10 listopada 2007, 17:35
15 lat zajmuję sie profesjonalnie bazami ale takie CUŚ to czytam pierwszy raz. Wzbudziło to moją litość.
Franek, 17 stycznia 2008, 21:16
Ja od 5 lat co prawda, ale uważam mimo wszystko, że artykuł jest znośny i raczej poprawny. Co do: "Pesel to zły pomysł. Zawsze ktoś mógłby dodać do bazy pesel, który nie jest jego (czyli nie jest prawdziwy)." Nazwisko, adres, ilość rodzeństwa i dowolną inną wartość poza mailem też moża skłamać. Możesz mieć id jako pesel, a mail zwreyfikować przy rejestracji - kto powiedział, że klucz ma byc zgodny z rzeczywistością? równie dobrze możesz nadać ID które z rzeczywistością nie ma nic wpsólnego iwielu wypadkach jest to dobry wybór....
qadro, 11 marca 2008, 09:55
W rzadnym wypadku nie należy stosowac kluczy naturalnych jak pesel. Po pierwsze to nie jest on stały - czasami się zmienia i co wtedy. Najlepiej stosować klucze sztuczne.
jaro, 16 lipca 2008, 14:45
"aby wstawić wartość klucza obcego, który nie posiada odnośnika na klucz obcy."

 
Chyba chodziło tutaj o "na klucz główny."
 
Pozdrawiam.

Marcin, 24 maja 2009, 00:50
błąd " Artykuł ten poświęcony będzie poświęcony  .."

D., 29 stycznia 2010, 19:38
Autor w pewnym momencie pisze, że kluczem może być PESEL bo po liczbach całkowitych szybciej się wyszukuje niż po łańcuchu tylko że PESEL jest 11 cyfrowy więc jako INTEGER go nie zapiszemy...
MANIU, 10 kwietnia 2010, 17:35
Dziadowski nic tu nie ma....!!!!
dd, 2 lutego 2011, 16:27
Wdg. mnie caly kurs jest dostepnie napisany. jesli ktos potrzebuje bardziej rozszerzonych to odsylam do manuali a nie do kursow :).
mozig, 21 czerwca 2011, 05:51
Beznadziejny kurs. Dla osób początkująch pisane zbyt trudnym językiem. Zero przykładów które mogłyby zobrazować teorię oraz pokazać jak tworzyć owe klucze
matrix, 10 lipca 2011, 15:42
w ciele artykułów stosuje się zazwyczaj czcionkę szeryfową
gość, 16 kwietnia 2012, 17:32

Dodaj swój komentarz

Zasady publikacji komentarzyZasady publikacji komentarzy

Redakcja CentrumXP.pl nie odpowiada za treść komentarzy publikowanych na stronach Portalu
i zastrzega sobie prawo do usuwania wypowiedzi, które:

  • zawierają słowa wulgarne, obraźliwe, prowokujące i inne naruszające dobre obyczaje;
  • są jedynie próbami reklamowania stron internetowych (spamowanie poprzez umieszczanie linków);
  • przyczyniają się do złamania prawa bądź warunków licencyjnych oprogramowania (cracki, seriale, torrenty itp.);
  • zawierają dane osobowe, teleadresowe, adresy mailowe lub numery GG;
  • merytorycznie nie wnoszą nic do dyskusji lub nie mają związku z tematem komentowanego newsa, artykułu bądź pliku.

Autor:

Komentarz:

Dodaj komentarz