Cześć,
nie wiem czy dość precyzyjnie nazwałem temat, ale już wyjaśniam o co mi chodzi.
Jestem na etapie projektowania aplikacji, i zaczęło mnie zastanawiać jak dużą część projektu powinna realizować baza danych i od czego to zależy jaką cześć działania tworzonego systemu realizować po stronie bazy danych a jaką po stronie apliakcji w warstwie logiki.
Przedstawię kilka scenariuszy i liczę na pomoc w wyborze oraz co najważniejsze o uzasadnienie dlaczego tak, a nie inaczej jest najlepiej.
Załóżmy, że realizujemy system do obsługi biblioteki. Baza danych przechowuje autorów, książki, klientów i wypożyczenia. Książki i klienci i są identyfikowani na podstawie kodu kreskowego.
Scenariusz 1 - duża cześć realizowana po stronie bazy danych. Baza bardzo mocno pilnująca integralności.
Mam tu na myśli przykładowo:
- duża liczbę check-constraint'ów i triggerów sprawdzających poprawność np kodu kreskowego, uniemożliwiających np wypożyczenie danej książki więcej razy niż jest jej w magazynie lub niedopuszczenie do wypożyczenia książki klientowi, który jest na czarnej liście.
- dużą liczbę procedur składowanych służących do dodawania nowych książek lub autorów
- relacje z określonymi działaniami akcji delete i update.
Scenariusz 2 - średnia ilość logiki realizowana po stronie danych
- sprawdzanie kodu kreskowego i możliwej ilości wypożyczeń sprawdzane po stronie aplikacji
- baza danych zawiera np triggery, które służą jedynie automatyzacji niektórych czynności - np trigger dokonujący wpisu w historii przy kasowaniu wypożyczenia.
- relacje mają określone działania delete i update
- dodawanie/edycja rekordów i sprawdzanie poprawności realizowane z aplikacji
Scenariusz 3 - brak realizacji logiki po stronie bazy danych
- baza danych zawiera jedynie tabele i relacje z określonymi działaniami delete i update.
- sprawdzanie i wszelkie wpisy realizowane ze strony aplikacji
Dodam, że do obsługi bazy danych użyję ORM'a.
Oraz, że warstwa danych nie musi niezależna od warstwy logiki (co w przypadku uniezależnienia jej mogłoby przemawiać za opcją 1)
Czekam na ciekawe i wyczerpujące wypowiedzi oraz wasze praktyki w tym względzie :-)