2数据库设计问题层次树

问题描述

| 1.)我有一个数据库,其中每个条目代表一个任务。 在几十甚至一百个任务中,会有一个特殊的任务(这是一个里程碑) 因此,在这种情况下,我只有很少的条目需要一个额外的字段来将它们与大多数分开。 我不想创建第二个表,因为这是使这些里程碑石变得特别的唯一字段,它们与常规任务条目共享许多其他字段。 我是否应该创建另一个字段以仅保留一些TRUE,而其余字段则默认为false 2)对于这些任务中的每一项,它都有可变数量的执行者(取决于用户输入)  (进一步来说,每个执行者都有自己的多个子执行者。)因此,我实质上是使用数据库来描述TREE结构。现在,我拥有5个相同任务信息的副本。是5位表演者,占据5位。如果我的数据库中的条目不超过10,000个(包括副本),这是一种解决方法 谢谢 这应该澄清一下 Task1(这是一个里程碑任务) 表演者1 次执行者ID = 21 次执行者ID = 542 表演者2 Task2(这不是里程碑任务) 表演者2 次执行者ID = 231 表演者和表演者是完全不同的群体。完全没有重叠。次级执行者是为执行者提供输入的组,因此执行者可以完成分配给他们的任务。     

解决方法

        我不确定这是否是您想要的: tblTask​​包含taskID列,isMilestone列以及您需要的所有内容。 tblAgent,其中包含agentID列和您需要的所有内容(这些将是(子)执行者)。 tblPerformance with fk_agentID,fk_task列 具有列fk_agentID_performer,fk_agentID_subperformer的tblSubperformance 被fk_外键引用
fk_agent -> tblAgent.agentID
fk_task -> tblTask.taskID
fk_agentID_performer -> tblAgent.agentID
fk_agentID_subperformer -> tblAgent.agentID
    ,        1)是,创建一个布尔标志。 2)没有。如果您有重复的数据,则有问题。 你需要规范化     ,        您确实没有在利用数据库的关系性质。做到这一点的好方法是: 有一张任务表(具有唯一的ID,没有额外的里程碑字段,没有预成型者) 有一个包含两列的里程碑表:任务ID和特殊里程碑字段-仅里程碑将出现在该表中 有一个包含两列的表:任务ID和执行者 有一个包含两列的表:表演者和子表演者 如果一个表演者可以有多个字段,请在上表中使用一个预表演者ID,并有一个包含表演者ID和其他字段的表 回复:评论   我已经读到规范化会降低数据库效率,这就是为什么我将它们全部组合在一起的原因。 哪里?这是一个很奇怪的说法。   对于包含taskid和Performer的表(列表中的第3个),如果任务143需要职员A,B,C,则是这样。在DB中,(行1 | 143 | A)(行2 | 143 | B) (第3行| 143 | C)您仍然没有冗余吗? 第三个表中的重复不是冗余问题,因为您没有复制任何信息:表中的信息是关于关系的,并且在三行中有三个关系。 当您进行像您这样的设置时,会出现一个冗余问题,假设任务143的完成日期为“ 2011年5月31日”,那么您的表将如下所示:
task_id  completion_date  performer
143      May 31,2011     A
143      May 31,2011     B
143      May 31,2011     C
现在,假设我要更改任务143的
completion-date
。在您的设置中,我必须在所有三行中对其进行更改,更糟糕的是,如果某人做错了,您将得到一个不一致的表,例如:
task_id  completion_date  performer
143      May 31,2011     A
143      May 12,2101     C
现在你不知道哪个是正确的
completion_date
! 规范化时,一个表中只有一行可以更改日期,并且您的数据库绝不会那样不一致。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...