Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] FOREIGN KEY
tadeurz
post
Post #1





Grupa: Zarejestrowani
Postów: 70
Pomógł: 1
Dołączył: 25.04.2009

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


Mam 2 tabele: (ich strukturę podaję niżej, nie zagłębiam się w szczegóły takie jak typy,index,primay key.)
USER -> id ; login ; password ;
PROFILE -> user_id ; rank ; point ; avatar ;

Chce w myPHPAdmin powiazać te 2 tabele relacją -> 1:1

Więc tak (po skrócie):
Tabele mają mechanizmy InnoDB.
Pole USER->id = PRIMARY, AUTO_INCREMENT;
Pole PROFILE->user_id = PRIMARY;
Wchodzę w tabele PROFILE -> Struktura -> Widok relacyjny = ustawiam łącze -> user_id:`db15982`.`user`.`id` ON DELETE:CASCADE ON UPDATE:CASCADE
MySQL zwraca mi:

  1. Zapytanie SQL zostało wykonane pomyślnie
  2. ALTER TABLE `profile` ADD FOREIGN KEY ( `user_id` ) REFERENCES `db606440`.`user` (
  3. `id`
  4. ) ON DELETE CASCADE ON UPDATE CASCADE ;


Teraz jeżeli dodam nowego użytkownika do tabeli USER powinien mi automatycznie dodać rekord w PROFILE ale tego nie robi, dlaczego ? Musze jeszcze w tabeli USER dodać łącze do pola user_id ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
sazian
post
Post #2





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


to działa inaczej
do tabeli PROFILE nie możesz dodać użytkownika o innym id niż te w tabeli USER


jeśli chcesz automatyczne dodawanie musisz zrobić wyzwalacz (trigger)
Go to the top of the page
+Quote Post
tadeurz
post
Post #3





Grupa: Zarejestrowani
Postów: 70
Pomógł: 1
Dołączył: 25.04.2009

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


To co daje ustawienie tych relacji w mySQL (IMG:style_emoticons/default/questionmark.gif) Satysfakcje ?
Ale jak będę usuwał rekord w USER to usunie mi rekord w PROFILE ? Czy też muszę pisać triggera (IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
sazian
post
Post #4





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


nie pozwalają na dodawanie danych niespójnych
to znaczy jeśli masz użytkowników o id 1,2,3,4 to nie możesz stworzyć profilu gdzie id usera będzie 5 bo takiego nie ma w tabeli z użytkownikami

co do usuwania

masz ustawione ON DELETE CASCADE czyli usunięcie czegoś z tabeli nadrzędnej (user) powoduje usunięcie wpisów z tabel podrzędnych (u ciebie profile)


za co teraz powiem pewnie wiele osób mnie zbeszta ale co tam (IMG:style_emoticons/default/smile.gif)

generalnie nie stosuje się kluczy obcych bo tylko komplikują życie. Często blokują usuwanie rekordów chociaż chcemy to zrobić świadomie, a do tego spowalniają dodawanie rekordów ...

Rozmawiałem kiedyś na ten temat z kolegą który pracuje w firmie piszącej aplikacje dla pewnego banku i przyznał mi rację, oni też nie stosują kluczy obcych. A skoro w banku dużym banku nie stosują to dlaczego ja mam to robić (IMG:style_emoticons/default/smile.gif)

tylko pamiętaj żeby ustawić indeksy na kolumnach do złączeń, one znacząco przyspieszają zapytania
Go to the top of the page
+Quote Post
trafas
post
Post #5





Grupa: Zarejestrowani
Postów: 87
Pomógł: 12
Dołączył: 31.05.2006

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


To fakt że klucze obce spowalniają działanie.
Często jest tak, że "pilnowanie" kluczy przerzuca się z poziomu bazy na warstwę aplikacji.
Go to the top of the page
+Quote Post
tadeurz
post
Post #6





Grupa: Zarejestrowani
Postów: 70
Pomógł: 1
Dołączył: 25.04.2009

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


dziękuję za informacje.
Plus dla ciebie sazian
Go to the top of the page
+Quote Post

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: 3.10.2025 - 18:46