1。)我有一个DB,每个条目代表一个任务。
并且在几十个甚至一百个任务中,将有一项特殊任务(这是一个里程碑)
因此,在这种情况下,我只有很少的条目需要额外的字段来将它们与大多数分开。
我不想创建第二个表,因为这是使这些里程碑石头特殊的唯一字段,它们与常规任务条目共享许多其他字段。
我是否应该创建另一个字段以保留一些TRUE,而其余字段为默认为
2.。)对于每个任务,它具有可变数量的执行者(取决于用户输入) (为了进一步说明,每个表演者都有自己的多个子表演者。)所以我基本上使用数据库来描述一个TREE结构。我现在拥有它的方式是,如果有的话,我会有5份相同的任务信息是5个表演者,占据5个参赛作品。如果我的数据库中不会有超过10,000个条目(包括副本),这是要走的路吗?
谢谢
这应该澄清它
Task1(这是里程碑任务)
Task2(这不是里程碑任务)
Subperformer和表演者完全不同。完全没有重叠。 Subperformer是为表演者提供输入的组,因此表演者可以完成他们分配给的任务。
答案 0 :(得分:1)
我不确定这是不是你想要的:
tblTask with columns taskID,isMilestone以及您需要的所有内容。
tblAgent包含列agentID和您需要的所有内容(这些将是(子)表演者)。
使用列fk_agentID,fk_task
的性能tbl与列fk_agentID_performer,fk_agentID_subperformer
的表现使用fk_外键引用
fk_agent -> tblAgent.agentID
fk_task -> tblTask.taskID
fk_agentID_performer -> tblAgent.agentID
fk_agentID_subperformer -> tblAgent.agentID
答案 1 :(得分:0)
1)是创建一个布尔标志。
2)没有。如果您有重复数据,则表示您遇到问题。 你需要normalize
答案 2 :(得分:0)
你真的没有利用数据库的关系性质。这样做的好方法是:
有一个包含两列的表:表演者和表演者
如果表演者可以有多个字段,请在上表中使用prerformer id并拥有一个包含表演者ID和其他字段的表格
回复:评论
我已经读过规范化会降低数据库效率,这就是我将它们全部组合起来的原因。
在哪儿?这是一个非常奇怪的主张。
对于包含taskid和执行者的表(列表中的第3个),如果任务143需要人员A,B,C,那就是这样。在DB中,(第1行| 143 | A)(第2行| 143行) | B)(第3行| 143 | C)你还有冗余吗?
第三个表中的重复不是冗余问题,因为您没有复制任何信息:表中的信息是关于关系的,并且三行中有三个关系。
如果你有像你这样的设置,就会出现冗余问题,假设任务143有一个completion_date“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, 2011 B
143 May 31, 2101 C
现在你不知道哪个是正确的completion_date
!
规范化时,一个表中只有一行来更改日期,并且数据库永远不会像那样不一致。