[newbie] Klucze - po co?
Lukasz Palka - 15-11-2005 20:12
[newbie] Klucze - po co?
Witam,
próbuję nauczyć się mysql. Googluje i staram się. Czytałem już troszeczkę dokumentację na www.mysql.com . Niestety mój angielski nie jest aż tak dobry. Próbowałem też wygooglać, ale nie udało mi się.
A moje pytanie - po co właściwie są klucze? Co daje zaznaczenie, ze dana kolumna jest kluczem podstawowym? Co daje ustawienie kluczy obcych?
Czytalem o INNER JOIN, dowiedzialem sie, ze rownie dobrze mozna uzywac ','. Rozumiem, ze w takiej sytuacji sama kolumna z kluczami jest potrzebna, ale co mi da, ze oznacze ta kolumne jako klucz podstawowy?
Wiem, ze te pytania sa naprawde podstawowe, ale ciezko jest znalezc podstawy w google.
Pozdrawiam -- Pala gg: 778724
Godless - 15-11-2005 20:12
Dnia Tue, 15 Nov 2005 00:18:07 +0100, Lukasz Palka napisał(a):
> A moje pytanie - po co właściwie są klucze?
Z: http://pl.wikipedia.org/wiki/Baza_danych
"Z braku możliwości identyfikacji wiersza przez jego pozycję pojawia się potrzeba obecności jednej lub więcej kolumn niepowtarzalnych w granicach całej tabeli, pozwalających odnaleźć konkretny wiersz. Kolumny te określa się jako "klucz podstawowy" (primary key) tabeli."
Praktyczny prosty przykład, który Ci to powinien zobrazować:
Masz tabelę "klienci", która zawiera pola: nazwa klienta, adres oraz tabelę, która zawiera pola: data zamówienia, opis zamówienia, zamawiający.
Załóżmy, że jako klient rejestruje się Anna Kowalska, dokonuje 5 zamówień, potem wychodzi za mąż za Nowaka (aktualizuje swoje dane w bazie i staje się Anną Kowalską Nowak), dokonuje następnych pięciu zamowień. Dodatkowo rejestruje się następny klient -- inna Anna Kowalska :) i dokonuje 5 zamówień.
Zamówienia Anny Kowalskiej (tej pierwszej) w polu zamawiający będą miały wartość "Anna Kowalska", a po ślubie "Anna Kowalska Nowak", zamówienia drugiej Anny Kowalskiej będą miały w polu zamawiający wartość "Anna Kowalska" -- więc widzisz momentalnie bałagan...
Aby go uniknąć, wystarczy wprowadzić do tabeli klienci pole "numer klienta" jako klucz główny, jednoznacznie identyfikujący dany rekord, zaś w tabeli zamówienia w "zamawiający" wpisywać ten numer.
Wtedy możesz mieć wielu użytkowników Anna Kowalska i bez problemu identyfikować, które zamówienia do której Anny należą i żaden ślub czy rozwód nie wpłynie na spójność danych Twojego sklepu :)
Moje wyjaśnienie jest, podejrzewam, bardzo łopatologiczne i na pewno koledzy grupowicze będą tu mieli sporo do dodania, ale sądzę, że da Ci ono jakiś pogląd na temat, po co w ogóle są klucze.
Pozdrawiam,
-- Godless godless@vp.pl
Godless - 15-11-2005 20:12
Dnia Tue, 15 Nov 2005 00:18:07 +0100, Lukasz Palka napisał(a):
> próbuję nauczyć się mysql. Googluje i staram się. Czytałem już troszeczkę > dokumentację na www.mysql.com . Niestety mój angielski nie jest aż tak > dobry. Próbowałem też wygooglać, ale nie udało mi się.
http://binboy.sphere.pl/index.php?sh..._Tutorial.html
To jest tutorial, który pochodzi najprawdopodobniej z manuala do MySQL'a -- prosty angielski, ze słownikiem na pewno dasz radę.
Wygooglać się da, chłopaki z Google naprawdę wszystko wiedzą :)
Pozdrawiam,
-- Godless godless@vp.pl
Grzesiek G. - 15-11-2005 20:12
Lukasz Palka napisał(a): > Witam, > > próbuję nauczyć się mysql. Googluje i staram się. Czytałem już troszeczkę > dokumentację na www.mysql.com . Niestety mój angielski nie jest aż tak > dobry. Próbowałem też wygooglać, ale nie udało mi się. > > A moje pytanie - po co właściwie są klucze? Co daje zaznaczenie, ze dana > kolumna jest kluczem podstawowym? Co daje ustawienie kluczy obcych? > Ustawianie kluczy (obcych i nieobcych) daje to, że integralności danych będzie pilnowała sama baza.
-- Grzegorz Gruza Odpowiadając usuń "spamerom_nie." z adresu!!!
Lukasz Palka - 16-11-2005 11:17
Godless wrote:
> Moje wyjaśnienie jest, podejrzewam, bardzo łopatologiczne i na pewno > koledzy grupowicze będą tu mieli sporo do dodania, ale sądzę, że da > Ci ono jakiś pogląd na temat, po co w ogóle są klucze.
No dobra, jakieś tam pojęcie o kluczach mam, ale np. ...
....załóżmy, że wklepuję zamówienie sam (cokolwiek wklepuję gdzieś), mam jakąś tabelkę z zamówieniami i nie pamiętam jaki dana osoba miała klucz podstawowy, to co w takim momencie? Muszę odnaleźć tą konkretną osobę i zapamiętać klucz? (może przykład z zamówieniami nie jest trafiony, bo prawdopodobnie zaloguje się ona w systemie i sama złoży zamówienie na "zalogowanym kluczu")
....dajmy taki przykład. Mam tabelkę książki. Mam w niej kolumnę - obcy klucz - wydawca_id. Wklepując nową książkę do tabeli nie pamiętam jaki klucz miało wydawnictwo i co wtedy?
Dzięki za pomoc. -- Pala gg: 778724
Lukasz Palka - 16-11-2005 11:17
Godless wrote:
> To jest tutorial, który pochodzi najprawdopodobniej z manuala do MySQL'a > -- prosty angielski, ze słownikiem na pewno dasz radę.
No to jest ten. Już go przerabiałem. Z angielskim jest problem gdy otworzę index i znajdę sobie jakiś syntax, bo nawet mając przetłumaczone na polski robią są schody. -- Pala gg: 778724
Sławomir Szyszło - 16-11-2005 11:17
Dnia Tue, 15 Nov 2005 22:46:53 +0100, Lukasz Palka <p.a.l.a@poczta.fm> wklepał(-a):
>No dobra, jakieś tam pojęcie o kluczach mam, ale np. ... > >...załóżmy, że wklepuję zamówienie sam (cokolwiek wklepuję gdzieś), mam >jakąś tabelkę z zamówieniami i nie pamiętam jaki dana osoba miała klucz >podstawowy, to co w takim momencie? Muszę odnaleźć tą konkretną osobę i >zapamiętać klucz? (może przykład z zamówieniami nie jest trafiony, bo >prawdopodobnie zaloguje się ona w systemie i sama złoży zamówienie na >"zalogowanym kluczu")
Klucze sztuczne to nie to samo co naturalne. Sztuczne, czyli "ID" służą przede wszystkim do powiązania poszczególnych tabel.
>...dajmy taki przykład. Mam tabelkę książki. Mam w niej kolumnę - obcy klucz >- wydawca_id. Wklepując nową książkę do tabeli nie pamiętam jaki klucz >miało wydawnictwo i co wtedy?
Wydawnictwa szukasz po NIP lub jakimś symbolu kontrahenta lub po nazwie. Klucz "wydawca_id" zapewnia ci powiązanie książki z tabelą "wydawcy". Nie myl interfejsu aplikacji ze schematem bazy danych. Po to są listy wartości, pola do wyszukiwania itp., żeby użytkownik nie musiał pamiętać wartości kluczy. Zaś aplikacja wewnętrznie wyszukuje "wydawca_id" wg zadanych kryteriów (NIP, nazwa, miasto) i wstawia je jako klucz obcy do tabeli "ksiazki".
Zajrzyj tu: http://www.dbf.pl/faq/tresc.html?rozdzial=1#linki1 -- Sławomir Szyszło mailto:slaszysz@poczta.onet.pl Primus inter FAQires & Grand Inquisitor no.0 of pl.comp.bazy-danych FAQ pl.comp.bazy-danych http://www.dbf.pl/faq/ Archiwum http://groups.google.com/groups?grou...mp.bazy-danych
Morff - 16-11-2005 11:17
Dnia 15-11-2005 o 22:46:53 Lukasz Palka <p.a.l.a@poczta.fm> napisał:
> Godless wrote: > >> Moje wyjaśnienie jest, podejrzewam, bardzo łopatologiczne i na pewno >> koledzy grupowicze będą tu mieli sporo do dodania, ale sądzę, że da >> Ci ono jakiś pogląd na temat, po co w ogóle są klucze. > > No dobra, jakieś tam pojęcie o kluczach mam, ale np. ... > > ...załóżmy, że wklepuję zamówienie sam (cokolwiek wklepuję gdzieś), mam > jakąś tabelkę z zamówieniami i nie pamiętam jaki dana osoba miała klucz > podstawowy, to co w takim momencie? Muszę odnaleźć tą konkretną osobę i > zapamiętać klucz? (może przykład z zamówieniami nie jest trafiony, bo > prawdopodobnie zaloguje się ona w systemie i sama złoży zamówienie na > "zalogowanym kluczu") > > ...dajmy taki przykład. Mam tabelkę książki. Mam w niej kolumnę - obcy > klucz > - wydawca_id. Wklepując nową książkę do tabeli nie pamiętam jaki klucz > miało wydawnictwo i co wtedy? > > Dzięki za pomoc.
1. nie wklepiesz klucza wydawnictwa , które nie istnieje 2. jezeli zapragniesz zmienić nazwe wydawnictwa , to w tabeli ksiązek bedzie odwołanie po id - nazwe bedziesz mógł zmieniać dowoli - i tak bedzie to dotyczyć tego samego wydawnictwa. 3. jezeli wydawnictwa bedą (powinny) mieć PK po id - to zapytanie łączące np pokazujące ksiązki i nazwy wydawnictw będzie działało szybko bo połączysz ksiązki.wydawnictwa_id=wydawnictwa.wydawnictwa_id
-- Pozdrawiam Morff ---------------------- AQQ 141151
Jester - 16-11-2005 11:17
Lukasz Palka napisał(a):
> >...dajmy taki przykład. Mam tabelkę książki. Mam w niej kolumnę - obcy klucz >- wydawca_id. Wklepując nową książkę do tabeli nie pamiętam jaki klucz >miało wydawnictwo i co wtedy? > > Musiałbyś pamiętać tę wartość gdybyś chciał wprowadzać rekordy (w Twoim wypadku książki) bezpośrednio fomułując zapytania insert... Najczęściej jednak dane wprowadza się poprzez jakiś interfejs (czy to aplikacja webowa czy standalone) i tam, w podanym przez Ciebie przykładzie, wydawcę wybierałoby się najpewniej z jakiejś rozwijanej listy. Lista ta zawierałaby pola, po kórych daną pozycję łatwo zidentyfikować użytkownikowi (np. nazwa wydawnictwa), zaś już do inserta przekazywany byłby identyfikator wybranej pozycji (wydawnictwa) - to realizuje aplikacja, którą łączysz się z bazą, Ty nie musisz znać tej wartości. Dla użytkownika wprowadzjącego (czy przeglądającego) dane najczęściej wartości kluczy są bez znaczenia, służą do powiązywania rekordów na poziomie bazy danych.
-- Pozdrawiam Jester
Lukasz Palka - 16-11-2005 11:17
Jester wrote:
> Musiałbyś pamiętać tę wartość gdybyś chciał wprowadzać rekordy (w Twoim > wypadku książki) bezpośrednio fomułując zapytania insert... Najczęściej > ...
O! Właśnie o coś takie wyjaśnienie mi chodziło, bo póki co wprowadzam sobie rekordy insertem.
Dzięki _wszystkim_ za pomoc! -- Pala gg: 778724
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[newbie] MS SQL - praca =?ISO-8859-2?Q?jednocze=B6nie_na_2_?==?ISO-8859-2?Q?bazach_=28linkowanie_=3F=29?=
=?iso-8859-2?q?klucze_obce_(bana=B3=3F)?=
db2 -klucze obce optymalizacja zapytan i inne
[mysql] klucze obce a dodawanie rekordów
mysql, klucze obce i auto_incremet
[mysql] klucze obce
[mysql] klucze złożone
Postgres i klucze (reindeksacja)
zacznij od 11 linii
mysql - podstawy
zanotowane.pldoc.pisz.plpdf.pisz.plnocnerozmowy.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|