Postgresql Postgres db设计规范化表或使用数组列

Postgresql Postgres db设计规范化表或使用数组列,postgresql,database-design,database-normalization,array-column,Postgresql,Database Design,Database Normalization,Array Column,新手试图找出为以下用例场景设计Postgres db的最佳方法 有一个用于业务客户的帐户表和一个具有列关系的联系人表 account.pk_id contacts.pk_id,contacts.fk_accountid Accounts表中的数千家不同企业将在contacts表中存储数百万个联系人 随着时间的推移,每个联系人记录将属于1到100个不同的类别、列表和产品 如果我使用一个经典的sql主/子关系,我可能会在诸如contacts\u categories、contacts\u List和

新手试图找出为以下用例场景设计Postgres db的最佳方法

有一个用于业务客户的帐户表和一个具有列关系的联系人表

account.pk_id

contacts.pk_id,contacts.fk_accountid

Accounts表中的数千家不同企业将在contacts表中存储数百万个联系人

随着时间的推移,每个联系人记录将属于1到100个不同的类别、列表和产品

如果我使用一个经典的sql主/子关系,我可能会在诸如contacts\u categories、contacts\u List和contacts\u products之类的表中找到数百万行,这些行将引用categories、List&products表

或者,我可以将类别、列表和产品的相关键(uuid)存储在联系人记录行的3个字符数组[]列中。这将消除对相当大的联系人类别、联系人列表和联系人产品表的需求

使用诸如Select unnest、array_append()和array index选项之类的工具,这似乎是一个聪明的解决方案,但我很想知道是否最好坚持使用规范化的关系以及更多的表和行计数来提高性能和/或存储内存/成本


以前有人试过吗?

太多人试过,这是个坏主意。您的许多查询,特别是连接,将变得复杂和缓慢。此外,您将无法使用外键约束来保证数据完整性

关系数据库擅长处理表中的数百万行。保持模式正常化