Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Co nam dają relacje?
piotrek0
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 23.03.2010

Ostrzeżenie: (0%)
-----


Witajcie!

Właśnie jestem w trakcie (któryś raz z kolei) nauki PHP i MySQL. Przyłożyłem się i chyba wiem do czego są relacje.

Krótko mówiąc służą one temu, aby nie dało się usunąć pewnych rekordów, jeżeli doprowadzi nam to do sytuacji takiej, że w innych tabelach zostaną rekordy które staną się nieprzydatne.

Jeżeli to jest jedyna funkcja relacji to o co takie wielkie halo?

A może wyciągnąłem pochopne wnioski i się mylę?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
piotrek0
post
Post #2





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 23.03.2010

Ostrzeżenie: (0%)
-----


@lobopol

No ja znam tę funkcjonalność o której piszesz (IMG:style_emoticons/default/smile.gif)

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=7672

Cytat
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.html

Cytat
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.


Ten post edytował piotrek0 25.03.2010, 17:00:03
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 09:38