如何处理 CouchDB 中的“参考表”?

Pat*_*ick 6 nosql database-design best-practices couchdb

处理“参考表”(包含静态数据的表,例如包含各种食物成分的列表)的最佳方法是什么?

  1. 多份文件,每种成分一份
  2. 每个参考文献一份

    { "_id" = "ingredients", "ingredient": [{ "name":"Apple", ... }] }

  3. 一份包含所有参考文献的文档

    { "_id" = "references", "ingredients": [{"id": "apple", "name": "Apple", ...}], "spices": [{"id": "cinnamon" , "name": "Cinnamon", ...}] }

Rol*_*DBA 2

作为一名盯着这个问题的 MySQL DBA,我从关系角度思考。我还考虑进行 JOIN 操作。然而,从 NoSQL 的角度来看,JOIN 必须以编程方式完成。

多个文档,每种成分一个:这将使放置在集合中的静态数据量最少。然而,您应该准备好获取参考资料、使用 CouchDB 为自己构建临时集合或直接将数据发送到您的应用程序。

一份包含所有参考文献的文档:如果您满足于挖掘 Collections out of Collections out of Collections ...(无穷大),您愿意构建这样的集合,并且您对此感到满意,那么以这种方式存储数据就可以了。请确保您不是唯一的 CouchDB Jedi(除非是工作保障问题),因为您可能希望您的代码可以被其他人理解和维护。

每个参考文献一个文档:现在,这是一个很好的中间立场。如果集合布局发生变化,它将提供一定的灵活性。成分的简单检索可以独立于香料或器皿的检索。仍然需要执行程序化 JOIN,但不是那么深入。那些 NoSQL 范式的新手(比如我)会轻松地理解和检索数据,而不必担心破坏根深蒂固的复杂数据表示。

我个人的选择是选项#2。