Decydowanie o kluczu obcym podczas implementacji relacji jeden do jednego w MySQL

Mam dwie proste tabele "items" I "orders". Dla uproszczenia przyjmijmy, że jeden przedmiot może być tylko w jednym zamówieniu lub jedno zamówienie może zawierać tylko jeden przedmiot.

Teraz, ponieważ można to zaimplementować za pomocą prostej relacji jeden do jednego, mogę wykonać następujące czynności:

Mogę dodać klucz główny tabeli zamówień do tabeli pozycji jak poniżej

//Table Items
item_id, item_name, order_id
1,        shoes,    1
2,        watch,    2

//Table Orders
order_id, customer
1,        James
2,        Rick

Lub Mogę dodać klucz główny tabeli items do tabeli orders jak poniżej

//Table Items
    item_id, item_name
    1,        shoes
    2,        watch

//Table Orders
order_id, customer, item_id
1,        James,    1   
2,        Rick,     2

Który jest poprawny i dlaczego? Czy są jakieś wskazówki, które decydują, który klucz idzie gdzie? Na pewno zdrowy rozsądek będzie działał w prostych przykładach jak wyżej, ale w złożonych przykładach jak się zdecydować?

Author: Jay Bhatt, 2013-05-31

1 answers

relacje One-To-One powinny być zazwyczaj scalane w jedną tabelę. Jeśli nie ma żadnych sprzeczności, relacja jeden do jednego może być oznaką nieświadomej decyzji.

I jeśli naprawdę chcesz korzystać z tego rodzaju relacji, to całkowicie od Ciebie zależy, gdzie umieścić FK. Możesz wziąć pod uwagę opcjonalność przy stosowaniu FK. Jednak w MySQL nadal nie będzie to prawdziwa relacja jeden do jednego, ponieważ klucze odroczone nie są wspierany tam.

 16
Author: Grzegorz Piwowarek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-11 08:58:09