这是一个非常天真的问题。正如您所知,它来自对数据库或Django不太了解的人。
在Django中使用ForeignKeys有什么好处?
也许一个例子可以帮助我更好地理解。我已经有这样的表了:
City:
id = IntegerField() # e.g. 15
name = CharField() # e.g. 'Rome'
Country:
name = CharField() e.g. 'Italy'
capital = IntegerField() # e.g 15
我是否应该将资金更改为ForeignKey(City)
,如果是,为什么?某些事情变得更快,更方便,还是更好?
谢谢!
答案 0 :(得分:4)
外键是数据模型的约束,可以确保一致性。基本上,在您的示例中,如果您没有capital
作为ForeignKey
到City
,则可能包含id
City
的{{1}}不存在!当您使用ForeignKey
时,它会对数据库设置一个约束,以便您不能删除当前由其他内容引用的内容。因此,如果您在删除以该城市为首都的名为City
的{{1}}之前尝试删除名为"Rome"
的{{1}},则不允许您这样做。
使用Country
可以确保您永远不必担心关系另一端的“事物”是否仍然存在。
答案 1 :(得分:3)
使用ForeignKeys
使Django能够“了解”关系。因此,您可以在不关注它们如何存储的情况下遵循关系,例如,您可以执行以下操作而无需关心如何存储关系:
country = Country.objects.get(pk=1)
print country.capital.name
italy = Country.objects.get(capital__name="Rome")
另外,为了保持约束,Django在删除ForeignKey引用的对象时将遵循关系。 Django还会跟踪反向关系(无需明确定义它们),所以你可以做一些像= rome.country_set.all()这样的东西(在这个例子里没那么有意义,因为它会更有意义在这里使用OneToOneField
...
答案 2 :(得分:1)
参照完整性。 OTOH很可能拥有一个既不知道也不关心FK的数据库 - 事实上我在工作中使用这样的遗留数据库。