Django模型 - 选择与外键?

时间:2010-10-26 06:06:58

标签: django django-models

据我所知,在Django中,ORM不支持MySQL或PostgreSQL中的ENUM类型,因为它最初是MySQL扩展,不能跨其他数据库类型移植。因此,两个选项是对模型使用“choices”参数,或使用外键引用。

这些方法的优点和缺点是什么?

对于像性别这样的东西,我假设你会使用“选择”,例如:

GENDER_CHOICES = (
    ('M', 'Male'),
    ('F', 'Female'),
)
...
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)

但是,对于像州名这样的东西,使用单独的表和该表的外键的原因是什么和反对的?

state = models.ForeignKey(AustralianState)

在什么情况下你会使用哪一种?

干杯, 维克多

3 个答案:

答案 0 :(得分:15)

我会选择选择不会随时间变化的选择。如果他们愿意,带有新模型的FK会更好。

答案 1 :(得分:3)

当潜在选择的数量很大时,您还应该考虑外键。这是考虑将FK用于国家或州的原因之一。否则,您将有效地对源代码中的大量数据进行硬编码。

答案 2 :(得分:0)

我建议默认使用查找表,否则,您将在代码中维护数据。它还使查找值可供直接访问数据库的用户访问,而无需通过您的应用程序(例如BI /报告功能)访问。

一个值得注意的例外-我将使用选择而不是查找表-是具有控制代码级逻辑的值的查找实体。您经常会在“状态”或“类型”实体(例如BillingType)中找到这种情况,其中逻辑取决于“类型”字段的值。在这些情况下,代码通常引用这些类型的显式标识符(代码),并且在任何情况下添加新类型都需要对逻辑进行更改(在代码中)。

相关问题