2010-10-13 16 views
6

Mam jeden model z 3 adresami: odbiór, odrzucenie i fakturowanie. Uważam, że adres rozliczeniowy będzie zazwyczaj adresem odbioru lub odrzucenia, więc z perspektywy interfejsu użytkownika powinienem mieć opcję "tak jak". Ale czy z perspektywy DB powinienem zapisać pole "tak jak", czy też powinienem duplikować dane?Jak przechowywać dane "takie same"?

Odpowiedz

4

Powinieneś mieć ten sam identyfikator rzędu z tabeli Adres w dwóch różnych kolumnach: PickUp i DropOff. W ten sposób nie duplikujesz adresu, nie używasz adresu wartownika i możesz łatwo zapytać, czy adres PickUp jest taki sam jak DropOff. Jeśli jedna z tych zmian nastąpi w przyszłości, zawsze możesz zmodyfikować wartość Id przechowywaną w odpowiedniej kolumnie na nowy adres.

+0

Dobrze ... oczywiste rozwiązanie. Myślę, że myliłem problemy w mojej głowie, kiedy to wymyśliłem (jest też "zapisz jako domyślny"). – mpen

2

Można utworzyć tabelę o nazwie "Adres" i wykonać Odbiór, Odrzucenie, Fakturowanie FK do tej tabeli Adres.

2

To, że adres jest tym samym adresem fizycznym, nie oznacza, że ​​jest to ten sam konceptualny adres. Naprawdę, adres John Doe może być "123 Elm St.", ale pod względem koncepcyjnym jego adres to "Adres pocztowy Johna Doe".

W szczególności, dla adresy powiedziałbym puszkę i powinny być powielane w bazie danych, ponieważ z tej prostej sprawy: rozważyć dwie osoby, które mieszkają pod tym samym adresem. Teraz jeden z nich się rusza. Jeśli adres był przechowywany tylko raz, uaktualnienie adresu "przenosnika" również zaktualizowałoby adres pierwotnego współlokatora.

Ale na ogół rozważ, w jaki sposób dane są powiązane z innymi danymi. Jeśli wiele rzeczy może się z nim wiązać, upewnij się, że zmiana jednego z nich wpłynie na nich wszystkich.

+0

Dobra sprawa, zależy jednak od scenariusza. – mpen

1

alt text

+0

Haha ... słodki! Nie musiałeś narysować mi diagramu, ale dzięki :) – mpen

Powiązane problemy