2013-02-12 15 views
5

Używam bazy danych MySQL. W moim modelu danych relacyjnych mam dwie jednostki, które odnoszą się do siebie nawzajem 1: 1. W moim schemacie, relacja 1: 1 jest ustawiana przez umieszczenie pola FK w jednej z dwóch tabel, która odnosi się do PK drugiej tabeli. Obie tabele mają PK i oba są przyrostami automatycznymi.Dwukierunkowe ograniczenie klucza obcego w relacji 1: 1

Zastanawiam się, czy możliwe byłoby zachowanie na nich zachowania ON DELETE CASCADE, które działa w obie strony.

tj. A 1: 1 B, oznacza, że ​​[usunięcie A usuwa również B], a także [usunięcie B powoduje także skasowanie A].

Zdaję sobie sprawę, że może to nie być absolutnie konieczne z punktu widzenia prawidłowego projektowania aplikacji, ale zastanawiam się, czy jest to rzeczywiście możliwe. O ile dobrze pamiętam, nie można umieścić ograniczenia FK na PK.

Odpowiedz

8

Nie można wstawić takich rekordów, jeśli obowiązują dwie relacje. Kurczak i jajko. Nie można wstawić zapisu w tabeli nr 1, ponieważ w tabeli nr 2 nie ma pasującego rekordu, a tabela nr 2 nie może zostać wstawiona, ponieważ w tabeli nr 1 nie ma nic do zaczepienia.

Możesz tymczasowo wyłączyć ograniczenia FK (set foreign_key_checks = 0), ale nigdy nie powinno się tego robić w "prawdziwym" systemie. Jest przeznaczony raczej do ładowania zrzutów, gdzie nie można zagwarantować kolejności ładowania tabeli.

+0

+1 za argument "kurczak lub jajko". ;-D – SparKot

+1

@DoSparKot: moja zwykła odpowiedź na "co było pierwsze?" pytanie brzmi "kogut": p –

+0

Hmm, to jest ważny punkt, o którym nie myślałem. Poza tym, tylko myśl o tym, że wiązanie zawodzi na wstawce, z powodu wartości automatycznie zwiększanego pola już wywołuje u mnie mdłości. (P.S. Kogut jest mężczyzną, nie jest to uczciwa walka.) –

Powiązane problemy