首页 > 解决方案 > Postgres db design 规范化表或使用数组列

问题描述

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

有一个用于业务客户的 Account 表,并且有一个具有列关系的联系人表。

帐户.pk_id,...。

contacts.pk_id,contacts.fk_accountid ...</p>

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

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

如果我使用经典的 sql 主/子关系,我最终可能会在诸如contacts_categories、contacts_lists 和contacts_products 等表中获得数百万行,这些行将从类别、列表和产品表中引用。

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

使用 Select unnest、array_append() 和数组索引选项等工具,它似乎是一个聪明的解决方案,但我很想知道坚持规范化关系以及更多表和行数是否更好,以提高性能和/或存储内存/成本。

以前有人试过吗?

标签: postgresqldatabase-designdatabase-normalizationarray-column

解决方案


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

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


推荐阅读