如何规范化 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 的建模等主题。
我正在尝试创建一个 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 的建模等主题。