[英]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.