关系数据库以不相关的方式

时间:2012-12-02 13:02:54

标签: postgresql nosql key-value

以noSQL方式使用关系数据库的优缺点是什么?

说noSQL我指的是使用一些相当简单的查询语言和水平扩展的键值存储。

现在我正在进行简单的实验,其中postgreSQL数据库以键值方式设计和查询。 这是一个例子。让它成为用户和文章,关系模型中的一对多。

关系:

User              Article
| id | login |    | id | user_id | title |
|----+-------|    |----+---------+-------|
|  1 | Alex  |    |  1 |    1    | FooBar| 
|  2 | Ann   |    |  2 |    1    | GoGoGo|
--------------    ------------------------
and some constraints on user id

要获取所有用户的文章,我们需要某种加入。

键值风格:

User                          Article
| id | login | articles |    | id | user_id | title |
|----|-------|----------|    |----+---------+-------|
|  1 | Alex  |  1, 2    |    |  1 |    1    | FooBar| 
|  2 | Ann   |          |    |  2 |    1    | GoGoGo|
-------------------------    ------------------------

让User.articles成为数组,例如,postgreSQL有一些工具用于处理数组。

在这种情况下,我将首先进行用户的查询,然后,当获取文章ID时,选择它们。我认为这与MongdDB的收藏方式非常相似。

此外,我知道,第二个案例是我的大学导师从未说过的事情,但看起来这种方法非常非常可扩展。

看起来像是重新发明轮子,但主要目标是为一些现在使用postgres的有前景的项目提供可扩展的解决方案。

1 个答案:

答案 0 :(得分:2)

我会使用n:m关系的规范化模型。如果在创建正确索引后,SELECT效果仍然不够好,我可能会创建由触发器自动更新的具体化视图

在这样的物化视图中,所有相关的ID都可以聚合到一个数组 - 或者你实际需要的任何东西。不过,我宁愿不将它用作主数据模型。