在django组织关系的最佳方式是什么?扁平还是树状?

时间:2013-08-05 14:37:29

标签: python django django-models database-relations

我有3个模特

client

loan

installment - 贷款的一部分

我要这样做:

loan-foreignKey(client)
installment-foreignKey(loan)

并获得类似的客户端分期付款:

loans = client.loan.all()
result = array()
foreach(loans as loan):
    result = result + loan.installments.all()
return result;

或者我应该这样做:

loan-foreignKey(client)
installment-foreignKey(client)
installment-foreignKey(loan)

并且只是: client.installment.all()

从程序员的角度来看第一种方式更清洁(没有spagetti,没有重复的字段)但我担心性能(你需要在数据库中搜索所有贷款然后分期付款)

2 个答案:

答案 0 :(得分:4)

根据Python的Zen: Flat比嵌套更好。您应该将模型视为对象并应用面向对象编程的原则。

考虑您拥有的实体,并应用模拟其现实生活互动的关系。

“必须编写程序供人们阅读,并且只能偶然为机器执行。”

答案 1 :(得分:1)

如果两个模型中的客户端相同,则不应复制它。关于在Django文档中select_related()only()defer()上的效果。