在django中编写应用程序时实现函数的最佳方法是什么?例如,我希望有一个函数可以读取其他表中的一些数据,然后合并到结果中并根据它更新用户得分。
我使用postgresql数据库,所以我可以将它实现为数据库功能,并使用django直接调用此函数。
我也可以在python中获取所有这些值,实现为django函数
由于模型是在django中定义的,我觉得我不应该在数据库构造中定义函数,而是在python中实现它们。此外,如果我想在另一台计算机上重新创建数据库,我需要对这些功能进行硬编码并将其加载到数据库中以便这样做。
另一方面,如果数据库在另一台计算机上,则此类功能需要多次调用数据库。
在django中实现应用程序时,首选哪个选项?
另外,我应该如何处理约束,我喜欢这些字段?是否重载save()
函数或手动向数据库字段添加约束?
答案 0 :(得分:3)
这是一个经典问题:在代码中执行此操作还是在DBMS中执行此操作?对我来说,答案来自于问自己这个问题:这个逻辑/功能是数据本身固有的,还是应用程序固有的?
如果它是数据的固有内容,那么您希望避免在应用程序中执行此操作。在多个应用程序要访问/修改数据的情况下尤其如此。在这种情况下,您可能在多种语言/环境中实现相同的逻辑。这种情况已经成熟,现在或将来会搞砸。
另一方面,如果这只是一种应用程序的数据思考方式,但其他应用程序有不同的观点(双关语),请在应用程序中进行。
BTW,谨防过早优化。了解数据库访问及其成本是件好事,但除非您正在讨论大数据或非常时间敏感的用户界面,否则机器时间以及较小程度的用户时间是比你的时间更重要。让v1.0出门往往更重要。正如无法模仿的Fred Brooks所说,"计划扔掉一个;你无论如何。"