Czy istnieje obecnie jakiś powód do budowania ograniczeń między tabelami (wewnątrz serwera SQL)? Jeśli tak, to kiedy? Większość aplikacji w moim obszarze opiera się na zasadach obiektowych, a tabele są łączone na żądanie. Zapotrzebowanie jest oparte na zapotrzebowaniu aplikacji. Nie załaduję zestawu ograniczonych tabel do prostego wyszukiwania, które z kolei (po akcji) wymagają kolejnego prostego wyszukiwania.
Narzędzia ORM, takie jak EntityContext, Linq2Data, NHibernate, same obsługują ograniczenia, przynajmniej wiesz, jakie tabele potrzebują się wzajemnie. Czy ograniczanie wewnątrz serwera polega na dwukrotnym wprowadzaniu (wymuszaniu) tych samych zmian?
Zwykle nie jest to kwestia do podjęcia decyzji, ale ta baza danych jest zaprojektowana zupełnie inaczej. Projekt wygląda normalnie dobrze, głównie odzwierciedlał obiekty używane przez aplikacje. To, co mnie niepokoi, to wszystkie ograniczenia skonfigurowane wewnątrz SQLserver z „not cascade”. Co oznacza, że podczas kodowania nowych zapytań do bazy danych musisz grać „szukaj i znajdź”. Niektóre przypadki wymagają do 10 poziomów dokładnej kolejności, aby wykonać jedno usunięcie.
To mnie zaskakuje i nie jestem pewien, jak sobie z tym poradzić.
W moim prostym świecie takie ustawienie sprawia, że ograniczenia tracą większość celu. OK, jeśli baza danych była dostępna z hostów bez znajomości projektu.
Jak postąpiłbyś w tym scenariuszu?
Dlaczego nie usunąć wszystkich ograniczeń z bazy danych i utrzymać je na poziomie aplikacji?