【问题标题】:Postgres db design Normalize tables or Use Array ColumnsPostgres db design 规范化表或使用数组列
【发布时间】: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


    【解决方案1】:

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

    关系数据库擅长处理表中的数百万行。保持架构规范化。

    【讨论】:

      猜你喜欢
      • 2021-10-18
      • 1970-01-01
      • 2020-12-13
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 2010-12-29
      • 1970-01-01
      相关资源
      最近更新 更多