Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Kucz obcy --- MySql

0 views
Skip to first unread message

art o|^_^|o

unread,
Sep 12, 2002, 7:20:16 PM9/12/02
to
Witam Serdecznie.
Tworzac relacje w Mysql'u w jaki sposob zdefiniowac KLUCZ OBCY ?

Bardzo prosze o pomoc.

Jakub Zysnarski

unread,
Sep 13, 2002, 2:31:25 AM9/13/02
to

Użytkownik "art o|^_^|o" <err...@poczta.onet.pl> napisał w wiadomości
news:alr75f$a0k$1...@news.tpi.pl...

> Witam Serdecznie.
> Tworzac relacje w Mysql'u w jaki sposob zdefiniowac KLUCZ OBCY ?
>
> Bardzo prosze o pomoc.
>

1. Poczytaj sobie, co to jest klucz obcy i czemu służy
2. Klucz obcy powinien być zaindeksowany. Masz 2 mozliwości
a) wartości w polu klucza mogą sie powtarzać:

ALTER TABLE tabela ADD INDEX _nazwa_indexu (klucz)

b) lub możesz wymusić sprawdzanie ich unikalności

ALTER TABLE tabela ADD UNIQUE _nazwa_indexu (klucz).

Klucz może składac się z kombinacji kilku pól

Pozdrawiam
Jakub

maniekp

unread,
Sep 13, 2002, 3:49:31 AM9/13/02
to

Tomasz Stański

unread,
Sep 13, 2002, 4:05:35 AM9/13/02
to
> > Witam Serdecznie.
> > Tworzac relacje w Mysql'u w jaki sposob zdefiniowac KLUCZ OBCY ?

Z tego co kojarzę MySQL nie ma kluczy obcych. Ale może jest już jaka¶ nowsza
wersja.

> 1. Poczytaj sobie, co to jest klucz obcy i czemu służy
> 2. Klucz obcy powinien być zaindeksowany. Masz 2 mozliwości
> a) wartości w polu klucza mogą sie powtarzać:
>
> ALTER TABLE tabela ADD INDEX _nazwa_indexu (klucz)
>
> b) lub możesz wymusić sprawdzanie ich unikalności
>
> ALTER TABLE tabela ADD UNIQUE _nazwa_indexu (klucz).
>
> Klucz może składac się z kombinacji kilku pól

No cosik namieszałe¶. Klucz obcy NIE musi być indeksowany. Niektóre bazy
automatycznie indeksuj± klucz obcy, ale jest to bardzo niewydajny indeks.
No i ta niepowtarzalno¶ć. Klucz obcy niemal z definicji jest powtarzalny.

--
Pozdrawiam,
Tomasz Stański


Rafał Jank

unread,
Sep 13, 2002, 4:26:48 AM9/13/02
to
On Fri, 13 Sep 2002 10:05:35 +0200
"Tomasz Stański" <(freespam)tsta...@testsa.com> wrote:

> > > Witam Serdecznie.
> > > Tworzac relacje w Mysql'u w jaki sposob zdefiniowac KLUCZ OBCY ?
>

> Z tego co kojarzę MySQL nie ma kluczy obcych. Ale może jest już jakaś nowsza
> wersja.
>
Już są.



> > 1. Poczytaj sobie, co to jest klucz obcy i czemu służy

> > 2. Klucz obcy powinien być zaindeksowany. Masz 2 mozliwo ci
> > a) warto ci w polu klucza mogš sie powtarzać:


> >
> > ALTER TABLE tabela ADD INDEX _nazwa_indexu (klucz)
> >

> > b) lub możesz wymusić sprawdzanie ich unikalno ci


> >
> > ALTER TABLE tabela ADD UNIQUE _nazwa_indexu (klucz).
> >
> > Klucz może składac się z kombinacji kilku pól
>

> No cosik namieszałeś. Klucz obcy NIE musi być indeksowany. Niektóre bazy
> automatycznie indeksują klucz obcy, ale jest to bardzo niewydajny indeks.
> No i ta niepowtarzalność. Klucz obcy niemal z definicji jest powtarzalny.

W MySQL-u musi być. A nawet jeśli baza tego nie wymaga, to jest to zalecane.
Zauważ że bez tego indeksu na przykład usunięcie rekordu z tabeli master
musiałoby spowodować przejrzenie sekwencyjne całej tabeli w której
zdefiniowany jest klucz obcy, co byłoby bardzo niewydajne.

--
_/ _/ _/_/_/ ----- Rafał Jank rj...@wp-sa.pl -----
_/ _/ _/ _/ _/ Wirtualna Polska SA http://www.wp.pl
_/_/_/_/ _/_/_/ ul. Traugutta 115c, 80-237 Gdansk, tel/fax. (58)5215625
_/ _/ _/ --------==* http://szukaj.wp.pl *==----------

Greg

unread,
Sep 16, 2002, 7:07:49 AM9/16/02
to
art o|^_^|o wrote:
>

The FOREIGN KEY, CHECK, and REFERENCES clauses don't actually do
anything. The
syntax for them is provided only for compatibility, to make it
easier to port code from other
SQL servers and to run applications that create tables with
references. See section 1.7.4 MySQL
Differences Compared to ANSI SQL92.

Tomasz Stański

unread,
Sep 16, 2002, 4:06:30 AM9/16/02
to
> W MySQL-u musi być. A nawet jeśli baza tego nie wymaga, to jest to
zalecane.
No chyba nie jest tak jednoznaczne, bowiem zaleca się również, aby indeksy
nie zawierały zbyt wielu powtarzających się wartości (a tak jest często z
kluczem obcym). Jest to oczywiście kwestia konkretnego zastosowania i
wyważenia, co jest w danym zastosowaniu ważniejsze.

> Zauważ że bez tego indeksu na przykład usunięcie rekordu z tabeli master
> musiałoby spowodować przejrzenie sekwencyjne całej tabeli w której
> zdefiniowany jest klucz obcy, co byłoby bardzo niewydajne.

Zgadza się.
Jeśli jednak mamy np. tabelę słownikową, to indeksowanie innej tabeli po
kluczu ze słownika jest zbędne.

--
Pozdrawiam,
Tomasz Stański


Rafał Jank

unread,
Sep 16, 2002, 4:17:42 AM9/16/02
to
To jest już nieaktualne.

Rafał Jank

unread,
Sep 16, 2002, 5:18:01 AM9/16/02
to
On Mon, 16 Sep 2002 10:06:30 +0200
"Tomasz Stański" <(freespam)tsta...@testsa.com> wrote:

> > W MySQL-u musi być. A nawet jeśli baza tego nie wymaga, to jest to
> zalecane.
> No chyba nie jest tak jednoznaczne, bowiem zaleca się również, aby indeksy
> nie zawierały zbyt wielu powtarzających się wartości (a tak jest często z
> kluczem obcym). Jest to oczywiście kwestia konkretnego zastosowania i
> wyważenia, co jest w danym zastosowaniu ważniejsze.
>

Jeśli indeks będzie mało selektywny optymalizator po prostu z niego nie
skorzysta. Zostanie tylko dodatkowy narzut przy operacjach DML (co oczywiście
nie znaczy, że należy indeksować wszystkie kolumny ;).

Greg

unread,
Sep 16, 2002, 12:10:50 PM9/16/02
to
"Rafał Jank" wrote:
>
> > art o|^_^|o wrote:
> > >
> > > Witam Serdecznie.
> > > Tworzac relacje w Mysql'u w jaki sposob zdefiniowac KLUCZ OBCY ?
> > >
> > > Bardzo prosze o pomoc.
> >
> > The FOREIGN KEY, CHECK, and REFERENCES clauses don't actually do
> > anything. The
> > syntax for them is provided only for compatibility, to make it
> > easier to port code from other
> > SQL servers and to run applications that create tables with
> > references. See section 1.7.4 MySQL
> > Differences Compared to ANSI SQL92.
> To jest już nieaktualne.
>

a mozesz podac zrodlo Twoich informacji ? (ja zacytowalem tylko aktualna
dokumentacje mysql'a)

maniekp

unread,
Sep 16, 2002, 8:12:58 AM9/16/02
to

patrz moja odpowiedz powyzej, tam jest link

pozdrawiam,maniek
http://oraforum.altkom.com.pl


Greg

unread,
Sep 17, 2002, 6:27:50 AM9/17/02
to

i co to zmienia ? przeciez pisze ze :

In MySQL Server 3.23.44 and up, InnoDB tables support checking of
foreign key constraints. See
section 7.5 InnoDB Tables. For other table types, MySQL Server does
parse the FOREIGN KEY
syntax in CREATE TABLE commands, but without further action being taken.

Rafał Jank

unread,
Sep 17, 2002, 3:58:45 AM9/17/02
to
> i co to zmienia ? przeciez pisze ze :
>
> In MySQL Server 3.23.44 and up, InnoDB tables support checking of
> foreign key constraints. See
> section 7.5 InnoDB Tables. For other table types, MySQL Server does
> parse the FOREIGN KEY
> syntax in CREATE TABLE commands, but without further action being taken.

Założyliśmy (nie wiem czy słusznie), że zadający pytanie używa tabel typu
InnoDB, gdzie klucze obce działają.

Greg

unread,
Sep 18, 2002, 6:32:41 AM9/18/02
to
"Rafał Jank" wrote:
>
> > i co to zmienia ? przeciez pisze ze :
> >
> > In MySQL Server 3.23.44 and up, InnoDB tables support checking of
> > foreign key constraints. See
> > section 7.5 InnoDB Tables. For other table types, MySQL Server does
> > parse the FOREIGN KEY
> > syntax in CREATE TABLE commands, but without further action being taken.
>
> Założyliśmy (nie wiem czy słusznie), że zadający pytanie używa tabel typu
> InnoDB, gdzie klucze obce działają.
>

chyba nie za bardzo slusznie, bo to nie sa domyslne tabele mysql :)

0 new messages