我正在尝试在postgresql数据库中存储一些唯一标识符以及它们已被显示的网站。我无法确定选择以下3个选项中的哪一个以便更快更容易维护。该表必须提供以下信息:
必须保留的数据量相当大:我知道有大约2200万个唯一标识符。
所以我想到了桌子的以下设计:
id - 整数
标识符 - 文本
seen_on_site - 站点表的整数,外键
这种方法需要大约22密耳乘以站点数量。
id - 整数
标识符 - 文本
seen_on_site_1 - 布尔值
seen_on_site_2 - boolean
............
seen_on_site_n - 布尔
希望站点的数量不会超过10.这只需要我知道的唯一标识符的数量,即大约2千万,但是从ORM的角度来看,这将很难使用它。
id - 整数
unique_identifier - text,
一个只存储网站的表格,例如:
id - 整数
网站 - 文字
和一对多关系,如:
id - 整数,
unique_id - 整数(fk到存储标识符的表)
site_id - 整数(fk到站点表)
那么,从长远来看,哪一个似乎是更好的方法呢?
答案 0 :(得分:1)
有两张桌子
表格1
网站ID,网站名称,网站描述
网站ID - >主键
网站名称 - >指数
表2将是您正在谈论的那个
行ID,站点ID,无论何种信息
行ID - >主键
网站ID - >外键入表1
索引(行ID,站点ID)
答案 1 :(得分:1)
如果您已经有一个基于文本的自然唯一标识符(url,也许?),那么您唯一需要的是一个包含两个字段的表:
CREATE TABLE (
unique_identifier TEXT NOT NULL,
site_identifier TEXT NOT NULL,
PRIMARY KEY (unique_identifier, site_identifier)
);
然后,您还可以在(site_identifier,unique_identifier)上添加UNIQUE INDEX,以方便网站查找。
你最终可能会以这种方式为主表使用一些额外的空间,但查询,更新和维护都很简单。
答案 2 :(得分:0)
如果我是你,我肯定会避免十列布尔恐怖,因为以后会有更多的网站。我同意Romain Hippeau的意见,并补充说你可能希望网站上的索引能够回答诸如“谁访问过网站x?”等问题。