0

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

我试图阅读hstore 文档,但我真的找不到如何创建表。

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

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
4

1 回答 1

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 教程和一些关于数据库设计的一般信息。

于 2012-12-03T03:48:58.807 回答