Warum werden Einschränkungen in der Datenbank angewendet? Wird es nicht flexibler sein, es in den Code einzufügen?
Ich lese ein Einsteigerbuch über die Implementierung von Datenbanken und frage dies als Anfänger. Angenommen, ich habe eine Datenbank mit folgendem Entitätsmodell entworfen:
entity type | sub-types
----------------+--------------------------------------------
Person | Employee, Student, ...
Student | Graduate, Undergraduate, ...
Employee | Teacher, Administrator, ...
Aktuelle Einschränkungen:
- Eine im System registrierte Person kann nur ein Student oder ein Mitarbeiter sein.
- Die Entität einer Person erfordert die Eindeutigkeit einer sozialen Zahl, von der wir annehmen, dass jede Person nur eine einzige eindeutige besitzt (auch bekannt als ein ausreichend guter Primärschlüssel). (siehe # 1)
Später beschließen wir, die Nummer 1 zu entfernen: Wenn das College eines Tages beschließt, dass der Teacher
(der Employee
Untertyp) auch sein Student
kann, Kurse in ihrer Freizeit zu belegen, ist es viel schwieriger, das Datenbankdesign zu ändern, das Tausende, Millionen, Milliarden haben könnte. Millionen von Einträgen, anstatt nur die Logik im Code zu ändern: Nur der Teil, der es einer Person nicht ermöglichte, sowohl als Student als auch als Angestellter registriert zu werden.
(Es ist sehr unwahrscheinlich, aber mir fällt gerade nichts anderes ein. Anscheinend ist es möglich).
Warum interessieren uns Geschäftsregeln im Datenbankdesign und nicht im Code?
# 1: Eine Notiz 7 Jahre später, ein Beispiel aus dem wirklichen Leben:
Ich habe eine Regierung gesehen, in der aufgrund eines Fehlers ausgegebene SSNs dupliziert wurden: mehrere Personen, dieselbe SSN. Diejenigen, die die ursprüngliche Datenbank entworfen haben, haben definitiv den Fehler begangen, diese Eindeutigkeitsbeschränkung nicht in der Datenbank anzuwenden. (und später ein Fehler in der Originalanwendung? Mehrere Anwendungen, die die gemeinsam genutzte Datenbank verwenden und sich nicht einig sind, wo die Einschränkung abgelegt, überprüft und durchgesetzt werden soll? ...).
Dieser Fehler wird noch viele Jahre im System und in dem gesamten System weiterleben, das danach entwickelt wurde, und auf die Datenbank des ursprünglichen Systems angewiesen sein. Als ich die Antworten hier las, lernte ich, alle Einschränkungen, so viele wie möglich, weise (nicht blind) in der Datenbank anzuwenden, um die reale physische Welt dort draußen so gut wie möglich darzustellen.