【问题标题】:Best way to normalize a table标准化表格的最佳方法
【发布时间】:2020-07-31 09:17:02
【问题描述】:

需要关于什么是标准化下表的最佳方法的建议:

早些时候,我有一张桌子:

personId    year    dob    column1    column2    column3
--------    ----    ---    -------    -------    -------  

这里,(personId+year) 是主键,dobcolumn1column2column3 列具有唯一值。

现在,根据新要求 column1column2column3 将存储多个值。在一个非常幼稚的意义上,它应该包含如下值:

personId    year    dob       column1    column2    column3
--------    ----    ------    -------    -------    -------  
       1    2018    2.1.20    A1, A2     B1         C1, C2, C3

我只是不想在第一范式之前对其进行规范化,而是想将其分解为更多表格,例如:

表 1:

personId    year    dob       
--------    ----    ------    
       1    2018    2.1.20    

表 2:

personId    year    column1   
--------    ----    ------    
       1    2018    A1    
       1    2018    A2

表 3:

personId    year    column2   
--------    ----    ------    
       1    2018    B1  

表 4:

personId    year    column3   
--------    ----    ------    
       1    2018    C1      
       1    2018    C2    
       1    2018    C3

现在表 1 对我来说看起来不错,因为它的 PK 仍然是 (personId+year),但表 2-3 看起来不是很优雅,因为它们缺少主键。

有没有更好的方法来实现这一点?

【问题讨论】:

  • 现在您只是要求我们使用定制教程重写教科书/手册。遵循已出版的有关信息建模、关系模型和数据库设计的学术教科书。 (用于记录和使用设计的语言和工具的手册不是这样的教科书。)(维基文章或网络帖子也不是。)在卡住的地方提出一个经过研究的特定非重复问题。请参阅How to Ask 和投票箭头鼠标悬停文本。 PS这不清楚你想要什么。 “很好”、“看起来不太优雅”和"better" 没有任何意义。 “实现这个”-究竟是什么?

标签: sql database-design database-normalization


【解决方案1】:

你很接近。您应该为第一个表引入一个新的主键,我也会为其他表推荐主键:

表 1:

t1Id   personId    year    dob       
   1       1       2018    2.1.20    

表 2:

t2Id    t1Id    column1   
  1       1      A1    
  2       1      A2

表 3:

t3Id    t1id    column2   
  1       1       B1  

表 4:

t4Id    t1id    column3   
  1       1       C1      
  2       1       C2    
  3       1       C3

如果排序很重要,您可能还希望在除第一个表之外的所有表中都包含一个顺序编号列。

另外,最后三个表中的数据列或许应该是各自表的id。

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 2016-11-24
    • 1970-01-01
    • 2010-11-01
    • 2012-08-23
    • 2010-10-18
    • 2017-12-05
    • 1970-01-01
    • 2013-09-15
    相关资源
    最近更新 更多