【发布时间】:2021-03-22 01:40:39
【问题描述】:
新手试图找出为以下用例场景设计 Postgres 数据库的最佳方法。
有一个用于企业客户的 Account 表,还有一个具有列关系的联系人表。
account.pk_id, ....
contacts.pk_id、contacts.fk_accountid ...
Accounts 表中的数千个不同企业将在 Contacts 表中存储数百万个联系人。
随着时间的推移,每个联系人记录将属于 1 到 100 个不同的类别、列表和产品。
如果我使用经典的 sql 主/子关系,我最终可能会在诸如 contacts_categories、contacts_lists 和 contacts_products 等表中包含数百万行,这些行将从 Categories、Lists 和 Products 表中引用。
或者,我可以将类别、列表和产品的相关键 (uuid) 存储在联系人记录行中的 3 个字符可变数组 [] 列中。这将消除对相当大的contacts_categories、contacts_lists 和contacts_products 表的需求。
使用 Select unnest、array_append() 和数组索引选项等工具,这似乎是一个聪明的解决方案,但我很想知道坚持规范化关系以及更多表和行数是否更好,以提高性能和/或存储内存/ 费用。
以前有人试过吗?
【问题讨论】:
标签: postgresql database-design database-normalization array-column