【问题标题】:Is it better to store recursive data in one OR two tables?将递归数据存储在一个或两个表中更好吗?
【发布时间】:2013-11-24 06:22:44
【问题描述】:

目标:对于一个简单的待办事项应用,需要存储任务和可能的子任务(模型 1)。

拥有一个使用递归关系的表或使用两个表“更好”吗?您认为的优点/缺点?对性能、可用​​性等的正面/负面影响。以这种方式使用递归是否正确?

模型 1:Taskssubtasks 在两个表中。 不需要更多的子任务级别。

模型 2:Taskssubtasks 在一个表中。顺便说一句,这种设计是否具有无限的子任务-级别(除了技术边界)是正确的吗?任务-子任务-子任务-...

【问题讨论】:

  • 不要让它比必要的更难!任务就是任务,(如我所见)没有区别,只有可能的父级。所以坚持模型 2。
  • 你必须修改模型2。你不想要一个子任务id,你想要一个父任务id。
  • @DanBracuk,谢谢,你说得对。

标签: mysql sql


【解决方案1】:

我不确定您为什么以这种方式提出您的问题,以及是什么让您感到困惑。
数据库的一个经典示例是存储员工的数据库。在员工表中,您还存储经理,因为经理也是员工。所以你所说的模型 2 并不是什么“奇怪”的东西。
自联接是一种常见的查询。
尝试以使查询尽可能简单且模型易于理解和扩展的方式定义表。
在您的情况下,仅当每个子任务具有其他任务没有的额外信息时,您才应该定义第二个表。
在您描述的模型 1 中,您只需复制主表的列。这不是一个好的设计 IMO。
据我所见,模型 2 适合您正在尝试做的事情。

【讨论】:

  • 嗯,我的第一个设计完全不同(更多属性)。然后我清理了其他想法,瞧,子任务就像任务一样。因为我以前从来没有做过self join,我有点担心,因为它看起来很优雅,我监督了一些事情。无论如何,您关于任务和子任务之间不同信息的论点帮助我清楚地看到它。应用程序的功能仍然是开放的,需要在任务或子任务中存储什么样的信息。子任务的深度也不清楚。目标是使其尽可能简单。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-21
  • 2022-11-04
  • 2010-10-30
  • 1970-01-01
  • 2013-03-05
  • 2014-08-12
  • 1970-01-01
相关资源
最近更新 更多