对于以下场景,使用django的最佳数据库设计是什么:
我有一个数据库中的计算机列表。我想添加一个由计算机执行的任务。有不同的任务,每个任务都有不同的领域。例如,一个可能是“安装程序”,它具有Program表的ForeignKey,其中条目包含有关如何安装程序的信息。或者它可能类似于“更改设置”,包含设置表中的ForeignKey。
我正在考虑使用带有(名称,描述)的TaskType,但为了完成上述工作,每个人都必须拥有Program和Setting的外键,即使任务也没有使用。这似乎不是最好的...还有另一种方式吗?
答案 0 :(得分:1)
如上所述,您的概念架构涉及以下谓词:
你也看似一个约束,你需要判断它有多重要:
有些人可能会建议自然的Django解决方案是使用model inheritance来表示基本的“任务”模型,它有两个子类 - “InstallTask”和“SettingTask”。然后你随身携带 “计算机”作为基类的属性,或者具有另一个模型“ComputerTask”等。
使用模型继承可以带来一些好处,包括(1)在创建(例如)ChangeTask的同时获得对创建基本任务的一些支持,以及(2)鼓励但不强制执行约束的维护
但是,根据我的经验,模型继承存在概念性问题,您可能会遇到令人惊讶和不需要的行为,例如,更新任务。在这种情况下,我可能只使用InstallTask放置任务1:1,使用SettingTask放置1:1。这实际上更灵活。
答案 1 :(得分:0)
不确定您的确切问题(数据不够)所以我的回答将是一点抽象(或高级别):)
恕我直言,看起来您可能对使用内容类型的generic relations感兴趣。
使用此功能可以选择从一种模式链接到任何其他模式, 所以你可以把不同的对象作为参考。