我正在学习NOSQL cloudant并尝试设计数据库,因为我正在学习我是cloudant将所有记录视为文档并使用非规范化表。所以我现在有点混淆了如何决定哪一个需要在一个文档中,哪一个需要分开。
以下是我的测试用例: 假设我正在设计商店书籍表格结构,为简单起见,我将使用这些表格BOOK,STORE,STORE_BRANCH
BOOK字段:_id,book_name,作者 STORE字段:_id,store_name STORE_BRANCH字段:_id,store_branch_name,address,store_id_fk
以上情况,我无法决定将“价格”字段放在哪里?至于正常的RDBMS,我将创建另一个表并具有字段:(存储book_id,store_branch_id和价格),假设每个分支的书的价格不同。所以我想知道我是如何把它放在云端的?
任何建议表示赞赏
答案 0 :(得分:3)
您对RDMBS用户的疑虑非常普遍。 在NoSQL中,通常使用一体化文档方法。实际上,在某些情况下,像Cloudant这样的面向文档的数据库中的JOIN近似是完全无足轻重的。例如,如果要建模一对一关系,可以将所有与n相关的文档放入它们所属的文档中。在您的情况下,您应该将所有store_branch放在相关的商店中。如果出现以下情况,则此策略可以:
如果上述策略不适用,您可以使用更接近地模仿在关系数据库中解决此问题的方法:您可以为每个"关系表创建一个文档"。在您的情况下,您应该创建一个包含字段的文档:(存储book_id,store_branch_id和价格)。
这篇Cloudant文章非常深入地解释了这些可能性:Cloudant - Join the fun, have fun with JOINs。