Database design 用于存储大量行的表设计

Database design 用于存储大量行的表设计,database-design,postgresql,Database Design,Postgresql,我试图在postgresql数据库中存储一些唯一的标识符以及它们在网站上的位置。为了更快、更易于维护,我真的无法决定选择以下3个选项中的哪一个。该表必须提供以下信息: 它是文本的唯一标识符 已在其上看到该唯一标识符的站点 必须保存的数据量相当大:据我所知,大约有2200万个唯一标识符 因此,我考虑了以下表格的设计: id-整数 标识符-文本 在站点上看到\u-一个整数,站点表的外键 这种方法需要大约2200万乘以场地数量 id-整数 标识符-文本 在站点上看到\u \u 1-布尔值 在

我试图在postgresql数据库中存储一些唯一的标识符以及它们在网站上的位置。为了更快、更易于维护,我真的无法决定选择以下3个选项中的哪一个。该表必须提供以下信息:

  • 它是文本的唯一标识符
  • 已在其上看到该唯一标识符的站点
必须保存的数据量相当大:据我所知,大约有2200万个唯一标识符

因此,我考虑了以下表格的设计:

  • id-整数

    标识符-文本

    在站点上看到\u-一个整数,站点表的外键

这种方法需要大约2200万乘以场地数量

  • id-整数

    标识符-文本

    在站点上看到\u \u 1-布尔值

    在_站点上看到__2-布尔值

    在站点上看到\u \u n-布尔值

希望网站数量不会超过10个。这只需要我所知道的唯一标识符的数量,即大约2000万个,但是从ORM的角度来看,使用它会很困难

  • 一个只存储唯一标识符的表,如:
id-整数

唯一_标识符-文本

一个只存储站点的表,如:

id-整数

站点-文本

一对多关系,如:

id-整数

unique_id-整数(fk到存储标识符的表)

站点id-整数(fk到站点表)

  • 另一种方法是使用一个表来存储每个站点的唯一标识符
那么,从长远来看,哪一种似乎是更好的方法呢?

有两个表。
表1 站点ID、站点名称、站点描述
站点ID->主键
站点名称->索引

表2就是您正在谈论的表。
行ID、站点ID、任何信息。
行ID->主键
站点ID->表1中的外键

索引(行Id,站点Id)

如果您已经有了一个基于文本的站点唯一标识符(可能是url?),那么您只需要一个带有两个字段的表:

CREATE TABLE (
    unique_identifier TEXT NOT NULL,
    site_identifier TEXT NOT NULL,
    PRIMARY KEY (unique_identifier, site_identifier)
);
然后,您还可以在上添加唯一索引(site_identifier,UNIQUE_identifier),以便于按站点进行查找


您可能会以这种方式为主表使用一点额外的空间,但查询、更新和维护非常简单。

如果我是您,我肯定会避免十列布尔恐惧,因为以后总会有更多的站点。我同意Romain Hippeau的观点,他补充说,你可能需要一个站点索引来回答“谁访问过站点x?”之类的问题。

好的,但这意味着我必须存储2200万个唯一数据乘以我拥有的站点数。这是否可行?我还不太擅长数据库设计:)。谢谢@这不是问题,只要您只通过索引或主键进行访问。