【问题标题】:How to Normalize a table where a column references multiple rows of a different column in the same table如何规范化列引用同一表中不同列的多行的表
【发布时间】:2019-10-21 20:53:48
【问题描述】:

我正在尝试创建一个表格,列出不同的应用程序以及它们是否与该列表中的其他应用程序集成。

ID  SKU     NAME            Integrations
1   pdk1    hubspot crm pdk3,pdk4,pdk5
2   pdk2    sugar crm   pdk5
3   pdk3    pipedrive   pdk1
4   pdk4    quickbooks  pdk1
5   pdk5    mailchimp   pdk1,pdk2

如何标准化集成列?

【问题讨论】:

  • 您应该摆脱将 CSV 数据存储在 Integrations 列中的范式。
  • @DeanArmstrong 。 . .请显示您想要的结果。
  • “引用”是什么意思,“规范化”是什么意思,为什么会卡住?现在,您只是要求我们用定制的教程重写教科书并完成您的(家庭)作业,而您没有表现出任何研究或其他努力。需求转储不是主题问题。请参阅How to Ask,点击谷歌搜索“stackexchange 作业”和投票箭头鼠标悬停文本。按照教科书的理由展示您的工作步骤,并在您遇到困难的地方进行解释。
  • 此外,规范化问题是这里的常见问题解答。 (尽管他们的回答大多都很糟糕。)在考虑发布之前,请始终在谷歌上搜索任何错误消息和许多清晰、简洁和准确的问题/问题/目标的措辞,有和没有你的特定字符串/名称;阅读许多答案。如果您发布问题,请使用一个短语作为标题。请参阅How to Ask 和投票箭头鼠标悬停文本。
  • 前面两位 cmets 的意思是“Hi Dean,欢迎来到 Stack Overflow”,然后像下面其他两位成员一样回答问题,这两个都是很好的回应。

标签: sql database postgresql database-design database-normalization


【解决方案1】:

在您的示例中,SKU 之间的关系是“多对多”(M:M)。在列中存储多个逗号分隔值违反了第一范式 (1NF)。因此,您需要使用额外的链接表来规范化表和模型 M:M 关系。

SKU 表

SKU
---
ID  SKU     NAME        
1   pdk1    hubspot crm 
2   pdk2    sugar crm   
3   pdk3    pipedrive   
4   pdk4    quickbooks  
5   pdk5    mailchimp   

链接表

SKU_INTEGRATION
---------------
ID  INTEGRATED_WITH_ID
1   3
1   4
1   5
2   5
3   1
4   1
5   1
5   2

你可以看看“Programming with databases”这本书,它涵盖了规范化、不同类型链接的建模等主题。

【讨论】:

    【解决方案2】:

    这是你想要的吗?

    select id, sku, name,
           regexp_split_to_table(integrations) as integration
    from t;
    

    这并不完全是“规范化的”,但它消除了使用分隔字符串来表示多个值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      • 2023-03-06
      相关资源
      最近更新 更多