Database design 设计问题

Database design 设计问题,database-design,Database Design,我目前正在从事一个项目,我的“单位”将有三个不同的“阶段”,每个“阶段”有三个“步骤”。我在设计数据库布局时遇到了问题,因此我不知道是将其全部放在一个表中还是多个表中 例如: 表1:单元id、单元类别、单元名称、单元阶段、单元步骤 或: 表1:单位id、单位类别、单位名称 表2:阶段id、阶段名称、单元id 表3:步骤id、步骤名称、单元id 连续更新一行中的字段更容易,还是将“单位”id放在其他表中更好 (此外,每个阶段都有完全相同的步骤) 澄清: 每个单元经历5个不同的阶段。每个阶段内有3

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

例如:

表1:单元id、单元类别、单元名称、单元阶段、单元步骤

或:

表1:单位id、单位类别、单位名称

表2:阶段id、阶段名称、单元id

表3:步骤id、步骤名称、单元id

连续更新一行中的字段更容易,还是将“单位”id放在其他表中更好

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

澄清:
每个单元经历5个不同的阶段。每个阶段内有3个步骤。一旦装置完成所有阶段,它将返回到静止状态。用户是启动该过程的人。

您应该从数据库的正常表单规则中获取信息。这将有助于设计您的桌子

看看:

规则:

  • 消除同一表中的重复列
  • 为每组相关数据创建单独的表,并使用唯一的列或列集(主键)标识每一行
  • 删除应用于表中多行的数据子集,并将其放置在单独的表中
  • 通过使用外键在这些新表和它们的前一个表之间创建关系
  • 删除不依赖主键的列
除非一个装置可以同时处于多个阶段或步骤中,或者每个装置的阶段和步骤是唯一的,否则有几个表是绝对没有意义的。

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

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

在我看来,这些关系:

  • 单位到阶段:1到多
  • 单位到步骤:1到多
  • 阶段到步骤:1对多
我将有3个单独的表:单位、阶段和步骤

  • 单位:id、类别、名称
  • 阶段:id、名称、单位id
  • 步骤:id、名称、阶段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'
    

    这与php没有任何关系。。。也许有更多代表的人可以编辑它?看起来每个单元将有多个步骤,因为1)每个阶段有多个步骤,2)每个单元有多个阶段。是的,但问题是:一个单元可以同时有多个步骤或阶段吗?只有n:m映射才需要额外的表。“阶段”和“步骤”对我来说意味着一个单元经历不同的阶段及其顺序步骤。每个单元经历不同的5个不同阶段。每个阶段内有3个步骤。一旦装置完成所有阶段,它将返回到静止状态