![]() |
![]() |
![]()
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:
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 ? |
|
|
![]() |
![]()
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) |
|
|
![]()
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) |
|
|
![]()
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 |
|
|
![]()
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. |
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 18:46 |