什么表结构更好?

时间:2014-07-27 11:55:54

标签: sql database database-schema ddl

我正在开发一个多用户任务管理器应用程序,但我偶然发现了数据库架构设计。我有用户表,类别,当然还有任务表。每个任务只属于一个类别。所以用DDL语言我需要一对多的#34;类别和任务之间的关系,对吗?我几乎可以肯定我需要"一对多"用户和任务实体之间的关系。 (如果我错了,请纠正我)。至于"类别 - 用户"关系,在这里,我认真考虑两个选项,我需要你告诉我哪一个是正确的,为什么:

  1. "多对多"关系,即用户可以有许多类别,反之亦然;

  2. "一对多"每个类别只能与一个用户相关的关系。在这种情况下,在类别表中将有大量具有相似名称的行,例如" work"," family"等等(因为在类别方面难以想出一些新的和原创的东西),这些东西只会因用户而异。列值。

  3. 在这种情况下,什么方法很常见?

1 个答案:

答案 0 :(得分:2)

这是一个棘手的问题,因为这两种方法都有优势。您可能需要更好地定义问题以及您想要完成的任务。

我正在开发一个类似的项目,其结构如下:

  • 用户表,基本信息
  • 一个自我相关的任务表,允许创建“项目”(没有父项的任务)和依赖任务(“此任务不应该在上一个任务完成之前启动”
  • 多对多分配表,将多个用户连接到多个任务(“此工作必须由user1和user2共同完成”

此处您的问题又回来了:用户如何组织待处理的任务?

  • 如果您的项目更像是待办事项列表,则不需要该分配表;坚持你的“每个任务只属于一个类别”声明
  • 如果允许用户创建自己的类别,您可能需要创建一个user-categories表,其中包含类别信息和用户表的外键
  • 如果用户必须从公共列表中选择以前创建的类别,则不需要该用户FK
  • 无论如何,如果用户可以对其分配的任务进行分类,则此类别表将成为分配表中的外键,因此每个用户都可以对自己的任务进行分类

根据我的经验,您应该推迟此类别决定并询问您的用户;他们会指出你正确的方向。

您也可以简单地创建user-catogories表,因为它比替代方案更灵活,并忽略数据重复。使用与用户建立多对多关系的基本类别列表可能不是一个好主意,因为用户可以决定重命名一个类别,所有其他用户都会受到此操作的影响。