Dlaczego ograniczenia są stosowane w bazie danych? Czy wstawienie go do kodu nie będzie bardziej elastyczne?
Czytam książkę dla początkujących na temat wdrażania baz danych, więc pytam o to jako początkujący. Powiedzmy, że zaprojektowałem bazę danych, w tym ten model encji:
entity type | sub-types
----------------+--------------------------------------------
Person | Employee, Student, ...
Student | Graduate, Undergraduate, ...
Employee | Teacher, Administrator, ...
Obecne ograniczenia:
- Zarejestrowaną osobą w systemie może być tylko Student lub Pracownik.
- Istota osobowa wymaga unikalności numeru społecznego, który, jak zakładamy, każda osoba posiada tylko jeden unikalny numer (czyli wystarczająco dobry klucz podstawowy). (patrz # 1)
Później decydujemy się usunąć numer 1: jeśli któregoś dnia kolegium zdecyduje, że Teacher( Employeepodtyp) może być również Student, biorąc udział w kursach w wolnym czasie, znacznie trudniej jest zmienić projekt bazy danych, który mógłby mieć tysiące, miliony, miliardy, zyliony wpisów, a nie tylko zmiana logiki w kodzie: tylko część, która nie pozwalała na rejestrację osoby jako ucznia i pracownika.
(To bardzo nieprawdopodobne, ale nie mogę teraz myśleć o niczym innym. Najwyraźniej jest to możliwe).
Dlaczego dbamy o reguły biznesowe w projektowaniu baz danych, a nie w kodzie?
# 1: Notatka 7 lat później, przykład z prawdziwego życia:
Widziałem rząd, w którym z powodu błędu wydano numery SSN: wiele osób, ten sam numer SSN. Projektanci oryginalnego DB zdecydowanie popełniali błąd, nie stosując tego ograniczenia unikatowości w bazie danych. (a później błąd w oryginalnej aplikacji? wiele aplikacji korzystających ze wspólnej bazy danych i nie zgadzających się, gdzie umieścić, sprawdzić i egzekwować ograniczenie? ...).
Ten błąd będzie nadal działał w systemie, a cały opracowany system będzie bazował na bazie danych tego oryginalnego systemu przez wiele lat. Czytając tutaj odpowiedzi, nauczyłem się stosować wszystkie ograniczenia, tak wiele z nich, jak to możliwe, mądrze (nie na ślepo) w bazie danych, aby reprezentować prawdziwy świat fizyczny tak dobrze, jak potrafię.