如何规范化 table,其中一列引用同一 table 中不同列的多行

How to Normalize a table where a column references multiple rows of a different column in the same table

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

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

如何规范化集成列?

这是你想要的吗?

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

这不完全是 "normalized",但它删除了使用分隔字符串来表示多个值。

您的示例中 SKU 之间的关系是 "many-to-many" (M:M)。在列中存储多个 comma-separated 值违反了第一范式 (1NF)。因此,您需要使用额外的 link table.

规范化 table 和模型 M:M 关系

SKU table

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

Link table

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”一书,其中涵盖了规范化、不同类型 link 的建模等主题。