繁体   English   中英

Django数据建模:外键还是硬编码?

[英]Django data modeling: Foreignkey or hard coded?

假设我有一个动物表,它具有名称和类型两个属性,而类型可以是:“ dog”,“ cat”等。以下是在Django中实现此属性的两种方法:一种是type是AnimalType的ForeignKey:

class Animal(models.Model):
    name = models.CharField(max_length=10)
    type = models.ForeignKey(AnimalType)

另一种是将type作为预定义的选择,将在导入的模块中进行定义:

class Animal(models.Model):
    name = models.CharField(max_length=10)
    type = models.CharField(
        max_length=10,
        choices=ANIMAL_TYPE_CHOICES
    )

在我看来,后者(预定义的选择)似乎更有效,因为类型永远不会通过用户交互来动态更新,并且如果需要添加新类型,则开发人员将添加它,即,将更新代码而不是数据库。

但是,我想知道这是否是一种好的/可以接受的做法? 还是应该为这样的“静态”条目浪费一个单独的数据库表,并且还要付出额外的时间来访问数据库? 谢谢。

第一种方法的优势在于,您无需触摸代码即可添加新型动物。

当然,也没有人使用您的应用程序。

添加新的动物类型是一件很简单的事情,例如,您不应该只为添加动物类型而烦恼部署在生产服务器上的工作代码。

如果由于在开始使用该应用程序时数据库为空而遇到问题,并且因此没有任何动物类型,那么请尝试使用Django固定装置: 为模型提供初始数据

我喜欢第二种方式。 如果您不需要从管理面板中编辑类型,并且始终会随着代码中的更改而进行更改,则无需拥有ForeignKeys和单独的表。

如果是ForeignKey,则将在数据库级别进行其他完整性检查。 例如,如果您删除某种类型并且不想将其保留在数据库中,则该功能很有用。

由于性能原因,我更喜欢现场选择。 即使可能的选择增加,只要功能仅仅是选择,也没有理由创建额外的表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM