no-sql如何处理关系数据?

时间:2013-11-12 15:57:15

标签: java javascript sql nosql

我知道它是一个非关系型数据库,但这并不意味着关系数据不存在。

例如,我有一个表格可以保存这样的网址(简化):

url | domain

我有一个表格,其中包含这样的域名(简化):

domain | favicon_path

由于许多不同的网址可能具有相同的域名,因此在拉取数据以便发送到视图时,我不想为每个域重复favicon_path。

因此,当我需要数据时,我使用了一个简单的(例如简化的)join命令。

"SELECT bookmarks.*, domains.favicon FROM bookmarks JOIN 
  domains ON bookmarks.domain=domains.domain"

如何使用no-sql处理这种情况?

我打算在客户端(javascript)上使用indexedDB和在服务器上使用MongoDB来实现no-sql(java)。

2 个答案:

答案 0 :(得分:0)

如果要使用面向文档的数据库,可以使用此文档结构:

URL_ID:{   “域”:“id_of_domain”   “another_staff”:“......” }

DOMAIN_ID:{    “favicon_path”:“另一个文档的路径或ID”,    “another_staff”:“......” }

因此,您可以从数据库获取ID为URL_ID的文档,然后获取Domain类型的文档。

<强>此外: 您可以使用以下方法生成ID。创建只有一个字段的特殊文档(如序列) - current_value_of_sequence。每次插入DB都必须得到这个序列并递增它。像Couchbase这样的一些数据库对这种机制有低级支持,这非常有效且线程安全。

答案 1 :(得分:0)

从IT领域的多年工作开始,我想说大多数商业模式可以像这两种类型的数据结构一样简单:

  1. 实体信息。
  2. 实体列表。
  3. 例如,在书店业务中,我们将拥有Book实体,以及包含所有书籍或整本书的子集的许多列表。

    使用NoSQL数据库,例如RedisSSDB,Book实体存储有Key-Value,其中key是book sn,value是字符串化的书信息(title,publish日期,描述等)。图书清单(按发布日期列出,按价格列表等)存储在zset数据类型中。