Oczywiście sugerujesz, że aplikacje CONSTRAINT
w bazie danych powinny być egzekwowane przez aplikacje, które / który uzyskują dostęp do tej bazy danych?
Istnieje wiele powodów, dla których jest to zły (zły, zły ...) pomysł.
1) Jeśli budujesz silnik typu „roll-your-own” z ograniczeniem (tj. W kodzie aplikacji), to emulujesz tylko to, co wydały Oracle / SQL Server / MySQL / PostgreSQL / <. Ktokolwiek ...> lata pisania. Ich kod CONSTRAINT był przez te lata testowany przez dosłownie miliony użytkowników końcowych.
2) Z całym szacunkiem dla Ciebie i Twojego zespołu, nie zamierzamy zrobić to dobrze nawet w ciągu kilku lat - od tutaj , MySQL kod sam koszt 40 milionów dolarów. A MySQL jest najtańszym z 3 serwerów powyżej i nawet nie implementują KONTRAKTÓW KONTROLNYCH. Oczywiście uzyskanie pełnej poprawności RI (Referential Integrity) jest trudne.
Często odwiedzałem fora Oracle i nie mogę powiedzieć, ile razy jakiś biedny menedżer / programista rzucił na niego projekt, w którym geniusz, który miał swoją pracę, wpadł na „błyskotliwy” pomysł robienia tego, co sugerujesz .
Jonathan Lewis (napisał 550-stronicową książkę na temat podstaw optymalizatora Oracle ) podaje jako nie. 2 z jego Design Disasters w innej książce („ Tales of the Oak Table ” - The Oak Table to grupa ekspertów Oracle) to
- Sprawdzimy integralność danych na poziomie aplikacji, zamiast wykorzystywać możliwości sprawdzania ograniczeń Oracle.
3) Nawet jeśli jakimś cudem potrafisz poprawnie wdrożyć RI, będziesz musiał całkowicie go ponownie wdrożyć dla każdej aplikacji, która dotyka tej bazy danych - a jeśli twoje dane są ważne, nowe aplikacje tak. Wybór tego paradygmatu doprowadzi ciebie i twoich kolegów programistów (nie wspominając o personelu pomocniczym i sprzedaży) do życia w ciągłej walce z ogniem i nędzy.
Możesz przeczytać więcej o tym, dlaczego wdrażanie OGRANICZEŃ danych na poziomie aplikacji jest szaleństwem tutaj , tutaj i tutaj .
Aby szczegółowo odpowiedzieć na twoje pytanie:
Dlaczego w ogóle są zadeklarowane? Wydaje się to bardzo pomocne, ale czy w rzeczywistości konieczne jest posiadanie działającej bazy danych
Dlatego, że KEY
s (albo PRIMARY
, FOREIGN
, UNIQUE
czy tylko zwykłe INDEX
ES) są uznane jest, że choć to nie jest to bezwzględnie konieczne do bazy danych, aby je za to działać, to jest absolutnie niezbędne dla nich zostać uznane za nim funkcjonować dobrze .