當考慮性能時,在django或數據庫中檢查約束的位置?
1)在python/django或數據庫中實現和檢查約束是否更好?或者可能兩個?
2)在django中,最好檢查約束條件在哪裏?例如在模型保存功能?
當考慮性能時,在django或數據庫中檢查約束的位置?
1)在python/django或數據庫中實現和檢查約束是否更好?或者可能兩個?
2)在django中,最好檢查約束條件在哪裏?例如在模型保存功能?
Django已經實現了直接到數據庫級別的通用約束,例如主鍵/外鍵和唯一鍵(對於單個字段或組合)。對於更具體的限制,放置它們的最佳位置在Django的model validation methods內。這樣,您就可以利用Django的功能(如模型繼承和模型表單),而無需分別在每個繼承的模型或表單處理例程中重寫約束檢查。
驗證方法的性能將與您所做的一樣好。實際上,有些情況下您不必訪問數據庫,因此性能可能會比在數據庫級別實施相同的限制更好。例如,如果您碰巧檢查要保存的對象中的某些模型字段值的組合(而不是其他保存的對象),則不必訪問數據庫,但可以在python對象級別快速執行檢查。
這並不意味着併發性可能會導致不一致,因爲兩個不同的線程通過模型驗證,然後寫入數據庫,彼此不知道?不是用於直接的「唯一」約束,因爲這些約束被Django推送到數據庫,而是依賴於其他行的任何其他類型的約束? – spectras
該數據庫中的約束條件用於優化查詢性能。所以,你可以驗證任何你想要的約束,但我會建議保持數據庫中的約束被啓用和驗證,以便使用優化器。 – haki