【问题标题】:Design Question设计问题
【发布时间】:2009-09-12 00:37:54
【问题描述】:

我目前正在从事一个项目,我有一个“单元”,它将有三个不同的“阶段”和每个“阶段”的三个“步骤”。我在设计我的数据库布局时遇到了麻烦,因此我不知道是将其全部放在一个表中还是多个表中。

例如:

表 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

...

连续更新字段更容易,还是将'units' id放在其他表中更好??

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

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

【问题讨论】:

  • 这真的和php没什么关系...也许有更多Rep的人可以编辑它?

标签: database-design


【解决方案1】:

你应该掠夺数据库范式规则。这将有助于设计您的表格。

看看:

规则:

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

【讨论】:

    【解决方案2】:

    除非一个单元可以同时处于多个阶段或步骤,或者每个单元的阶段和步骤是唯一的,否则拥有多个表绝对没有意义。

    【讨论】:

    • 看起来每个单元会有多个步骤,因为 1)每个阶段有多个步骤,2)每个单元有多个阶段。
    • 是的,但问题是:一个单元是否可以同时具有多个步骤或阶段?只有 n:m 映射需要额外的表。
    • “phase”和“step”对我来说意味着一个单元依次经历不同的阶段和步骤。
    • 每个单元经历不同的 5 个不同阶段。在每个阶段内是 3 个步骤。一旦单元完成所有阶段,它就会返回到休息状态
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      'units' 将包含三个 不同的“阶段”和三个“步骤” 到每个“阶段”

      我所看到的关系:

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

      我会有 3 个单独的表格:单位、阶段和步骤。

      1. 单位:id、类别、名称
      2. 阶段:id、name、unit_id
      3. 步骤:id、name、phase_id

      然后,如果您想获取与单元相关联的所有步骤,类似于以下的 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'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-18
        • 2011-11-09
        • 2011-01-16
        • 2011-03-21
        • 2010-10-14
        • 1970-01-01
        • 2011-09-26
        • 2010-10-09
        相关资源
        最近更新 更多