Sie schlagen offensichtlich vor, dass CONSTRAINT
s in einer Datenbank von der / den Anwendung (en) erzwungen werden sollen, die / die auf diese Datenbank zugreifen?
Es gibt viele Gründe, warum dies eine schlechte Idee ist.
1) Wenn Sie eine "Roll-Your-Own" -Einschränkungs-Engine (dh innerhalb Ihres Anwendungscodes) erstellen, emulieren Sie lediglich das, was Oracle / SQL Server / MySQL / PostgreSQL / <. Whoever ...> ausgegeben hat Jahre schreiben. Ihr CONSTRAINT-Code wurde in diesen Jahren von buchstäblich Millionen von Endbenutzern getestet .
2) Bei allem Respekt vor Ihnen und Ihrem Team werden Sie es auch in wenigen Jahren nicht richtig machen - von hier aus hat MySQL-Code allein 40 Millionen Dollar gekostet. Und MySQL ist der billigste der drei oben genannten Server und implementiert nicht einmal CHECK CONSTRAINTs. Offensichtlich ist es schwierig, RI (Referential Integrity) vollständig richtig zu machen.
Ich war oft in den Oracle-Foren und kann Ihnen nicht sagen, wie oft ein armer Manager / Programmierer ein Projekt angestoßen hat, bei dem das Genie, das zuvor seinen Job hatte, die "gute" Idee hatte, das zu tun, was Sie vorschlagen .
Jonathan Lewis (er schrieb ein 550-seitiges Buch über die Grundlagen des Oracle-Optimierers ) gibt als Nr. 2 seiner Design Disasters finden sich in einem anderen Buch (" Tales of the Oak Table " - der Oak Table ist eine Gruppe von Oracle-Experten)
- Wir werden die Datenintegrität auf Anwendungsebene überprüfen, anstatt die Möglichkeiten von Oracle zur Einschränkungsprüfung zu nutzen.
3) Auch wenn Sie RI wie durch ein Wunder richtig implementieren können, müssen Sie es für jede Anwendung, die diese Datenbank berührt, immer wieder vollständig neu implementieren - und wenn Ihre Daten wichtig sind, werden es neue Anwendungen sein. Wenn Sie dies als Paradigma wählen, werden Sie und Ihre Programmierkollegen (ganz zu schweigen von Support-Mitarbeitern und Verkäufen) ein Leben in ständiger Brandbekämpfung und Elend erleben.
Lesen Sie hier , hier und hier, warum die Implementierung von data CONSTRAINTs auf Anwendungsebene geradezu Wahnsinn ist .
Um Ihre Frage konkret zu beantworten:
Warum werden sie überhaupt deklariert? Es scheint sehr hilfreich, aber ist es tatsächlich notwendig, eine Datenbank zu haben, die funktioniert
Der Grund , dass KEY
s (entweder PRIMARY
, FOREIGN
, UNIQUE
oder nur gewöhnlich INDEX
n) deklariert sind , ist , dass, während es nicht unbedingt notwendig für eine Datenbank , sie zu haben für sie funktionieren, ist es unbedingt erforderlich , dass sie dafür Funktion deklariert werden , gut .