设计问题

时间:2009-09-11 16:01:35

标签: database-design

我目前正在开展一个项目,我有'单位',每个'阶段'将有三个不同的“阶段”和三个“步骤”。我无法设计数据库的布局,因此我不知道是将它全部放在一个表还是多个表中。

例如:

表1:unit_id,unit_category,unit_name,unit_phase,unit_step

或:

表1:unit_id,unit_category,unit_name

表2:phase_id,phase_name,unit_id

表3:step_id,step_name,unit_id

...

是否可以更容易地连续更新行中的字段,还是将“单位”ID放在其他表中更好?

(同样,每个阶段都有完全相同的步骤)

澄清: 每个单元经历5个不同的阶段。每个阶段内有3个步骤。一旦该单元经历了所有阶段,它就会返回静止状态。用户是启动流程的人。

4 个答案:

答案 0 :(得分:2)

你应该抢劫数据库常规表单规则。这将有助于设计你的表格。

看看:

规则:

  • 从同一个表中删除重复列。
  • 为每组相关数据创建单独的表,并使用唯一列或一组列(主键)标识每一行。
  • 删除适用于表的多行的数据子集,并将它们放在单独的表中。
  • 通过使用外键在这些新表及其前任之间创建关系。
  • 删除不依赖主键的列。

答案 1 :(得分:1)

除非一个单元可以同时处于多个阶段或步骤中,或者每个单元的阶段和步骤都是唯一的,否则有几个表格完全没有意义。

答案 2 :(得分:0)

http://en.wikipedia.org/wiki/Database_normalization

这是你应该深入研究的话题。但是对于您的具体问题:尽量不要复制记录。尝试以一种方式设计数据库,通过最少数量的公共属性(键)将每个表链接到其他表。

答案 3 :(得分:0)

  

'单位'将有三个   不同的“阶段”和三个“步骤”   到每个'阶段'

关系,正如我所见:

  • 单位到阶段:1对多
  • 单位到步骤:1对多
  • 阶段到步骤:1对多

我将有3个单独的表:单位,阶段和步骤。

  1. 单位:id,category,name
  2. 阶段:id,name,unit_id
  3. 步骤:id,name,phase_id
  4. 然后,如果您想获得与单元相关的所有步骤,那么类似于以下的SQL将起作用:

    SELECT steps.*
    FROM units
    LEFT OUTER JOIN phases ON units.id=phases.unit_id
    LEFT OUTER JOIN steps ON phases.id=steps.phase_id
    WHERE units.id='the particular unit ID for which you want to query'