【发布时间】:2011-11-23 18:34:48
【问题描述】:
我的模型中有一些字段不会总是填写(例如,项目结束前的实际完成日期和成本)。正因为如此,我想我应该把模型分成两部分:
- 模型 #1:包含经常搜索和始终完成的字段的密集表
- 模型 #2:包含不常搜索且并非总是完成的字段的稀疏表
问题
- 我是否正确地将其拆分为两个模型/表?
- 我应该使用 Django 的多表继承,还是应该明确定义
OneToOneField?为什么?
配置
- Django 版本 1.3.1
型号
使用 Django 的多表继承
class Project(models.Model):
project_number = models.SlugField(max_length=5, blank=False,
primary_key=True)
budgeted_costs = models.DecimalField(max_digits=10, decimal_places=2)
class ProjectExtendedInformation(Project):
submitted_on = models.DateField(auto_now_add=True)
actual_completion_date = models.DateField(blank=True, null=True)
actual_project_costs = models.DecimalField(max_digits=10, decimal_places=2,
blank=True, null=True)
使用显式OneToOneField
class Project(models.Model):
project_number = models.SlugField(max_length=5, blank=False,
primary_key=True)
budgeted_costs = models.DecimalField(max_digits=10, decimal_places=2)
class ProjectExtendedInformation(models.Model):
project = models.OneToOneField(CapExProject, primary_key=True)
submitted_on = models.DateField(auto_now_add=True)
actual_completion_date = models.DateField(blank=True, null=True)
actual_project_costs = models.DecimalField(max_digits=10, decimal_places=2,
blank=True, null=True)
【问题讨论】:
-
老实说,我认为拆分您的模型没有意义,原因如下:您声明不经常搜索且并不总是完成的字段也是“稀疏”的。这降低了拆分模型的价值,可能无法弥补额外的复杂性。当然,您比我更了解您的数据,所以请谨慎采纳我的建议。
标签: django database-design django-models