@lobopol
No ja znam tę funkcjonalność o której piszesz

Najprostszym jej przykładem jest zastosowanie tabeli słownikowej z województwami.
Mamy na przykład tabelę użytkownicy a w niej kolumnę z nazwaUżytkownika i województwoUżytkownika w którym trzymamy cyferki (idWojewództwa) a drugiej tabeli województwa mamy idWojewództwa z cyferkami i nazwaWojewództwa.
I teraz jak chcemy zrobić tak, aby pobrać dane do tablicy z tabeli użytkownicy z obu kolumn, ale żeby w drugiej nie mieć cyferek tylko nazwy to po prostu zadajemy odpowiednie zapytanie.
To są te magiczne relacje? Bo mi się wydawało, że do relacji trzeba jakieś klucze obce stosować.
Kurczę może wypisuje jakieś bzdury bo to pojęcie jest dla mnie strasznie abstrakcyjne.
Swoje wnioski wyciągnąłem stąd:
http://forum.di.com.pl/showthread.php?t=7672Cytat
we wszystkich bazach SQLowych (nawet w Oraclu) relacje tworzy się w zapytaniach, w bazie sie ich nie zapisuje, bo nie ma to zbytniego sensu. Oczywiście, narzędzia, które wspomagają tworzenie zapytań, np. jak edytor kwerend w MS Access pokazują graficznie relacje, ale...
Relacje dodaje się w zapytaniach po klauzuli WHERE np.
SELECT * FROM imie,nazwisko WHERE imie.id_imie = nazwisko.id_imie;
lub
SELECT * FROM imie,nazwisko WHERE imie.id_nazwisko = nazwisko.id_nazwisko;
lub, jeśli baza danych jest niespójna ( relacja 1:1 nie jest zachowana)
SELECT * FROM imie,nazwisko WHERE imie.id_imie = nazwisko.id_imie AND imie.id_nazwisko = nazwisko.id_nazwisko;
w twoim przypadku, to automatyczne przypisanie kluczy musisz albo zaimplementować w programie, który odwołuje sie do bazy, aby robił takie rzeczy (jak zauważyłeś, mało elegancka metoda, ale powszechnie stosowana ) , albo musisz napisać trigger - to taki "program", który wywoła się w konkretnych wypadkach ( w twoim przypadku bedzie to aktualizacja tabeli imie badz nazwisko) i wykona odpowiednia operacje ( w tym wypadku aktualizacja kluczy.
Triggery są w MySQLu od niedawna, sam jeszcze nie wiem, jak się je tworzy w tej bazie, więc musisz popytać wujka googla
Mam nadzieje, że to wystarczająco konkretna odpowiedź
i stąd:
http://209.85.129.132/search?q=cache:http:...zy/relacje.htmlCytat
Co to wszystko nam daje?
Jeśli w tabeli zamowienia mamy w polu id_klienta wartość, która nie odpowiada żadnej z wartości klucza głównego w tabeli klient to mamy problem. Oznacza to bowiem, że mamy zamówienie i nie wiemy kto je złożył. Co prawda, możemy w aplikacji, która z takiej bazy danych korzysta, wprowadzić odpowiednie sprawdzenie i reakcję na tego typu błędy, to jednak dużo bezpieczniej i wygodniej jest dbać o integralność danych w samej bazie danych. A zatem definiowanie relacji pomiędzy danymi w różnych tabelach umożliwia nam zachowanie logicznej integralności danych, w taki sposób aby można było bezpiecznie i logicznie (a jednocześnie nie powtarzając danych) wprowadzać i przechowywać dane i korzystać z nich.