Oto prosty przykład:Jak określić domyślny adres wysyłki klientów w tabeli bazy danych?
Załóżmy, że mam tabelę klientów, która ma relację jeden-do-wielu z tabelą adresów (klient może mieć wiele adresów wysyłki, ale adres wysyłki może należeć tylko do jednego klienta).
Customer Table
-------------
customer_id (PK)
Address Table
-------------
address_id (PK)
customer_id (FK)
Teraz chcę, aby każdy klient mógł określić domyślny adres wysyłki.
Mogę wymyślić 2 sposoby, ale obie mają wady.
Wariant 1
Dodaj kolumnę logiczną do tabeli Adres nazwie "is_default".
Plusy
- kwerendy wybierające są proste
- Prosta dla innych ludzi, aby zrozumieć, jeśli oni zobaczyć model DB
Wady
- Aplikacja jest fo rced, aby wymusić i utrzymać "tylko jeden wiersz może być domyślnym" ograniczeniem.
- Aktualizacja domyślnego pola jest uciążliwa, ponieważ wymaga od aplikacji sprawdzenia i zresetowania poprzedniej domyślnej opcji.
Opcja 2
Dodaj kolumnę do tabeli użytkownika o nazwie „address_id” i sprawiają, że klucz obcy (null pozwalają również na wszelki wypadek nie istnieje adres).
Plusy
- łatwe do aktualizacji adresu domyślnej jeśli użytkownik zdecyduje się ją zmienić.
- Baza danych utrzymuje "tylko jeden wiersz może być domyślnym" ograniczeniem.
Wady
muszę dodać nową kolumnę do indeksowanej tabeli Klienci za każdym razem postanawiam dodać jakieś domyślnego metadanych.
Wygląda hack
Moje pytanie brzmi, czy jest to standardowy sposób obsłużyć tego rodzaju scenariusza, że jestem z widokiem? Oczywiście są inne opcje (może tworzenie domyślnej tabeli wartości EAV?), Ale wolałbym, aby było to tak proste, jak to tylko możliwe, ponieważ zmiana jest wprowadzana do istniejącej podstawy kodu, więc nie chcę niczego łamać.
Myślałem o tym, ale wtedy musiałbym stworzyć nową tabelę „domyślne” na każdym stole, że wymaga to domyślna karta kredytowa stanowi –
@BillH: Dlaczego? Nic nie stoi na przeszkodzie, aby dodać kolejną kolumnę, 'default_credit_card_id', która wskazuje na tabelę Credit_Card. Nazwa tabeli jest wystarczająco ogólna, aby uchwycić * wszystkie * wartości domyślne dla klienta. – Mac