Django już implementuje ogólne ograniczenia, takie jak klucz podstawowy/obcy i unikalny (dla pojedynczych pól lub kombinacji) bezpośrednio do poziomu bazy danych. Aby uzyskać bardziej szczegółowe ograniczenia, najlepiej umieścić je w Django pod numerem model validation methods. W ten sposób możesz korzystać z funkcji Django, takich jak dziedziczenie modeli i formularze modelowe, bez konieczności przepisywania sprawdzeń ograniczeń w każdym odziedziczonym modelu lub procedurze obsługi formularzy odpowiednio.
Skuteczność metod walidacji będzie tak dobra, jak to możliwe. W rzeczywistości mogą istnieć przypadki, w których nie trzeba będzie trafiać w bazę danych, więc wydajność prawdopodobnie byłaby lepsza niż wdrożenie tego samego ograniczenia na poziomie bazy danych. Na przykład, jeśli zdarzy ci się sprawdzić jakąś kombinację wartości pól modelu w obiekcie, który ma zostać zapisany (nie w porównaniu z innymi zapisanymi obiektami), nie musisz uderzać w bazę danych, ale szybko sprawdzaj na poziomie obiektu Pythona.
ograniczenia w tej bazie danych służą między innymi do optymalizacji wydajności zapytań. więc możesz sprawdzać ograniczenia tam, gdzie chcesz, ale sugerowałbym utrzymanie ograniczeń w bazie danych włączonych i sprawdzonych pod kątem użycia optymalizatora. – haki