2016-03-07 79 views
0

我目前正在学习NOSQL cloudant并试图设计数据库,因为我正在学习我云计算将所有记录视为文档并使用denormalise表进行处理。所以我现在对如何决定哪个文档需要放在一个文档中以及哪个文档需要分离有点困惑。决定在云中创建多个数据库和关系

下面是我的测试情况: 让我们说我设计商店书表结构,为简单起见,我就做这个表本,存储,STORE_BRANCH

簿字段:_id,BOOK_NAME,笔者 STORE字段:_id,商店名称 STORE_BRANCH字段:_id,store_branch_name,地址,store_id_fk

以上情况下,我无法决定应将“价格”字段放在哪里?对于正常的RDBMS,我只是创建另一个表并且有字段:(存储book_id,store_branch_id和价格),假设每本分支的书价格是不同的。所以我想知道我如何把它放在云中?

任何建议表示赞赏

回答

3

你的疑虑是RDMBS用户很常见的。 在NoSQL中,通常使用一切文档方法。事实上,在某些情况下,像Cloudant这样的面向文档的数据库中的JOIN近似是毫无意义的。例如,如果要建立一对一关系的模型,可以将所有与n有关的文档放入它们所属的文档中。在你的情况下,你应该把所有的store_branch放入相关的商店。这种策略是好的,如果:

  • 该文件不会太大,它会损害性能。这可以通过使用数据库视图或显示功能来缓解。
  • 内部文档中的信息只出现在那里,不需要复制到其他文档中,或者您的应用程序可以接受这种复制。
  • 该文档不会同时更新。如果是这样,那么可能会有不必要的冲突需要由应用程序来解决。

如果上述策略不适用,您可以使用一种更接近模拟您在关系数据库中如何解决此问题的方法:您可以为每个“关系表”创建一个文档。在你的情况下,你应该创建一个包含字段的文档:(store book_id,store_branch_id和prices)。

这篇Cloudant文章非常深入地解释了这些可能性:Cloudant - Join the fun, have fun with JOINs

+0

非常感谢Umberto的链接和解释。我会遵循你对STORE的建议,STORE_BRANCH可以是一个文档,并为STORE_BRANCH和BOOK的关系创建另一个文档。所以我的下一个问题是,因为我将STORE_BRANCH合并到STORE中。所以关系文档将有字段BOOK_ID,STORE_ID.BRANCH_NAME和PRICE。那是对的吗? 所以价值会像这样:cloudant_001,popular.popular_north_brach,200? – kkurni

+0

商店应该包含相关商店分支的列表。整个文件 –