PostgreSQL和hstore为了制作两个键值存储

时间:2012-12-03 00:53:18

标签: sql postgresql hstore

我想创建两个键值存储。一个具有url的键和url的值,另一个具有url(这是其他表的值)和得分(整数)。

我试过阅读hstore documentation,但我真的找不到如何创建表格。

我想将网址表示为字符串。我正在将网址映射到其“父网址”。分数的概念应该更像索引,索引越高,网站越好(根据与其他页面的连接和访问时间的想法计算)。基本上一些示例数据可能如下所示:

key url:    https://maps.google.com/maps?hl=en&tab=wl
parent url: https://www.google.com/

parent url: https://www.google.com/
score: 100

key url: http://www.cracked.com/blog/5-things-you-should-know-before-making-indie-movie/
parent url: http://www.cracked.com/

parent url: http://www.cracked.com/
score: 125

1 个答案:

答案 0 :(得分:4)

我认为你没有理由在这里使用hstore

您可以使用一对简单的表格对此进行建模。这是您数据的简单翻译:

CREATE TABLE url_scores(
    parent_url text primary key,
    score integer not null
);

CREATE TABLE url_mappings(
    key_url text not null,
    parent_url text not null references url_scores(parent_url)
);

INSERT INTO url_scores(parent_url, score) VALUES ('https://www.google.com/', 100);
INSERT INTO url_scores(parent_url, score) VALUES ('http://www.cracked.com/', 125);

INSERT INTO url_mappings(key_url, parent_url)
VALUES ('https://maps.google.com/maps?hl=en&tab=wl', 'https://www.google.com/');

INSERT INTO url_mappings(key_url, parent_url)
VALUES ('http://www.cracked.com/blog/5-things-you-should-know-before-making-indie-movie/
', 'http://www.cracked.com/');

...但是,您可能希望对其进行更多规范化,将http / https和域分成几部分,可能使用代理键进入url_scores而不是存储parent_url两次,等等。

顺便说一句,关系数据库完全有可能不是您数据的正确存储空间。如果不知道你在做什么,很难说。

无论如何,请阅读PostgreSQL教程和一些有关数据库设计的一般信息。