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 中的数百万行。保持架构规范化。