2013-07-07 5 views
5

Wo nach Constraints in Django oder Datenbank zu überprüfen?

1) Ist es besser eine Einschränkung in Python/Django oder in der Datenbank zu implementieren und zu überprüfen? Oder möglicherweise beides?

2) Im Django, wo sollte man am besten nach Einschränkungen suchen? z.B. in der Modellspeicherfunktion?

+0

Einschränkungen in dieser Datenbank werden unter anderem zur Optimierung der Abfrageleistung verwendet. Sie können also die Einschränkungen validieren, wo immer Sie wollen, aber ich würde vorschlagen, die Einschränkungen in der Datenbank für die Verwendung des Optimierers aktiviert und validiert zu lassen. – haki

Antwort

6

Django implementiert bereits allgemeine Einschränkungen wie Primär/Fremdschlüssel und eindeutig (für einzelne Felder oder Kombinationen) direkt auf die Datenbankebene. Für spezifischere Einschränkungen ist der beste Platz, um sie zu setzen, in Djangos model validation methods. Auf diese Weise können Sie die Funktionen von Django wie Modellvererbung und Modellformen nutzen, ohne dass Sie in jedem vererbten Modell bzw. in jeder Formularhandhabungsroutine Ihre Abhängigkeitsüberprüfungen neu schreiben müssen.

Die Leistung Ihrer Validierungsmethoden wird so gut sein, wie Sie es schaffen. In der Tat kann es Fälle geben, in denen Sie nicht auf die Datenbank zugreifen müssen. Daher wäre die Leistung wahrscheinlich besser als die Implementierung derselben Einschränkung auf Datenbankebene. Wenn Sie zum Beispiel nach einer Kombination von Modellfeldwerten im zu sichernden Objekt suchen (nicht gegen andere gespeicherte Objekte), müssen Sie nicht auf die Datenbank zugreifen, sondern Ihre Prüfungen auf Python-Objektebene schnell durchführen.

+4

Heißt das nicht auch, dass Parallelität zu Inkonsistenzen führen kann, da zwei verschiedene Threads die Modellvalidierung bestehen und dann unbemerkt in die Datenbank schreiben? Nicht für geradzahlige "eindeutige" Constraints, da diese von Django in die Datenbank geschoben werden, aber jede andere Art von Constraint abhängig von anderen Zeilen? – spectras

Verwandte Themen