Postgres 数据库设计规范化表或使用数组列
Postgres db design Normalize tables or Use Array Columns
新手试图找出为以下用例场景设计 Postgres 数据库的最佳方法。
商业客户有一个帐户 table,并且有一个具有列关系的联系人 table。
account.pk_id, ....
contacts.pk_id, contacts.fk_accountid …
帐户 table 中数以千计的不同企业将分别在联系人 table 中存储数百万个联系人。
随着时间的推移,每个联系人记录将属于 1 到 100 个不同的类别、列表和产品。
如果我使用经典的 sql master/child 关系,我可能会在 table 中得到数百万行,例如 contacts_categories、contacts_lists 和 contacts_products 将引用类别、列表和产品 tables.
或者,我可以将类别、列表和产品的相关键 (uuid) 存储在联系人记录行的 3 个字符可变数组 [] 列中。这将消除对 contacts_categories、contacts_lists 和 contacts_products table 的需求,它们会非常大。
使用 Select unnest、array_append() 和数组索引选项等工具,这似乎是一个明智的解决方案,但我很想知道坚持规范化关系是否更好 table性能和/或存储内存/成本的行数。
有人试过这个吗?
太多人试过了,这是个坏主意。您的许多查询,尤其是连接,将变得复杂和缓慢。此外,您将无法使用外键约束来保证数据完整性。
关系数据库擅长处理 table 中的数百万行。保持架构规范化。
新手试图找出为以下用例场景设计 Postgres 数据库的最佳方法。
商业客户有一个帐户 table,并且有一个具有列关系的联系人 table。
account.pk_id, ....
contacts.pk_id, contacts.fk_accountid …
帐户 table 中数以千计的不同企业将分别在联系人 table 中存储数百万个联系人。
随着时间的推移,每个联系人记录将属于 1 到 100 个不同的类别、列表和产品。
如果我使用经典的 sql master/child 关系,我可能会在 table 中得到数百万行,例如 contacts_categories、contacts_lists 和 contacts_products 将引用类别、列表和产品 tables.
或者,我可以将类别、列表和产品的相关键 (uuid) 存储在联系人记录行的 3 个字符可变数组 [] 列中。这将消除对 contacts_categories、contacts_lists 和 contacts_products table 的需求,它们会非常大。
使用 Select unnest、array_append() 和数组索引选项等工具,这似乎是一个明智的解决方案,但我很想知道坚持规范化关系是否更好 table性能和/或存储内存/成本的行数。
有人试过这个吗?
太多人试过了,这是个坏主意。您的许多查询,尤其是连接,将变得复杂和缓慢。此外,您将无法使用外键约束来保证数据完整性。
关系数据库擅长处理 table 中的数百万行。保持架构规范化。