【问题标题】:What are naming conventions for MongoDB?MongoDB 的命名约定是什么?
【发布时间】:2011-08-20 10:33:36
【问题描述】:

对于 MongoDB 实体(例如数据库、集合、字段名)是否有一组首选命名约定?

我的想法是这样的:

  • 数据库:由目的(单数)组成,以“db”结尾——全部小写:imagedb、resumedb、memberdb 等。
  • 收藏:小写复数:图片、简历、
  • 文档字段:lowerCamelCase,例如memberFirstName、fileName 等

【问题讨论】:

    标签: mongodb naming-conventions


    【解决方案1】:
    1. 保持简短:Optimizing Storage of Small ObjectsSERVER-863。愚蠢但真实。

    2. 我想适用于关系数据库的几乎相同的规则应该适用于此。而且经过这么多年,RDBMS 表应该命名为单数还是复数仍然没有一致意见......

    3. MongoDB 使用 JavaScript,因此请使用 camelCase 的 JS 命名约定。

    4. MongoDB 官方文档提到你可以使用下划线,内置标识符也被命名为_id(但这可能是为了表明_id 是私有的,内部的,从不显示或编辑。

    【讨论】:

    • 3 和 4 有点矛盾——JS 更喜欢驼峰式,Mongo 似乎更喜欢下划线......但是如果有疑问,请使用下划线。习惯非拉丁字母的人会感谢你的。
    • 查看这个问题以了解单数与复数的辩论:stackoverflow.com/questions/338156/…
    • 我不确定我会说“JS 更喜欢驼峰式”。 JS 本身并没有偏好,但或许可以说大部分 JS 程序员倾向于使用驼峰式大小写。
    • @treeface 我认为 Matt 指的是 JS 的内置方法在节点和浏览器中都使用 camelCase 的事实
    • 内置标识符 _id 最有可能带有下划线前缀,以遵循通用的 JavaScript 约定,该约定表示密钥是内部/私有密钥。换句话说,_id 不打算被编辑或呈现给查看集合数据的任何人。
    【解决方案2】:

    我认为这都是个人喜好。我的偏好来自于在 .NET 中使用 NHibernate 和 SQL Server,因此它们可能与其他人使用的不同。

    • 数据库:正在使用的应用程序.. 例如:Stackoverflow
    • 集合:名称中的单数,它将是什么集合,例如:问题
    • 文档字段,例如:MemberFirstName

    老实说,这并不重要,只要它对项目保持一致即可。开始工作,不要担心细节:P

    【讨论】:

    • 我认为可能产生后果的是文档字段,因为它们将存储在每个文档中。正如 Tomasz 指出的那样,保持它们简短应该可以节省空间/带宽。不过,我认为使用易于理解的东西更为重要。
    【解决方案3】:

    在我们得到SERVER-863 之前,建议保持字段名称尽可能短 尤其是在你有很多记录的地方。

    根据您的用例,字段名称可能会对存储产生巨大影响。无法理解为什么这不是 MongoDb 的更高优先级,因为这将对所有用户产生积极影响。如果不出意外,我们可以开始对字段名称进行更具描述性,而无需考虑带宽和存储成本。

    vote

    【讨论】:

    • 只是为了更新这个答案的潜在未来读者,MongoDB 这些天进行压缩,所以长字段名称不再是一个真正的问题。
    【解决方案4】:

    即使没有为此指定任何约定,manual references 也始终以 Mongo 文档中引用的集合命名,用于一对一的关系。名称始终遵循<document>_id 的结构。

    例如,在dogs 集合中,文档将手动引用外部文档,其名称如下:

    {
      name: 'fido',
      owner_id: '5358e4249611f4a65e3068ab',
      race_id: '5358ee549611f4a65e3068ac',
      colour: 'yellow'
      ...
    }
    

    这遵循 Mongo 将 _id 命名为每个文档的标识符的约定。

    【讨论】:

    • 我没有在我的回答中提到 camelCase,所以我会使用 owner_id
    【解决方案5】:

    集合的命名约定

    为了命名一个集合,需要采取一些预防措施:

    1. 包含空字符串 (“”) 的集合不是有效的集合名称。
    2. 集合名称不应包含空字符,因为它定义了集合名称的结尾。
    3. 集合名称不应以前缀“system”开头。因为这是为内部收藏保留的。
    4. 最好不要在集合名称中包含字符“$”,因为数据库可用的各种驱动程序不支持集合名称中的“$”。

    创建数据库名称时要记住的事项是:

    1. 具有空字符串 (“”) 的数据库不是有效的数据库名称。
    2. 数据库名称不能超过 64 个字节。
    3. 数据库名称区分大小写,即使在不区分大小写的文件系统上也是如此。因此,最好将名称保持为小写。
    4. 数据库名称不能包含以下任何字符“/, , ., “, *, , :, |, ?, $,”。它也不能包含单个空格或空字符。

    了解更多信息。请查看以下链接:http://www.tutorial-points.com/2016/03/schema-design-and-naming-conventions-in.html

    【讨论】:

      【解决方案6】:

      数据库

      • 驼峰式
      • 在名称末尾附加 DB
      • 使单数(集合是复数)

      MongoDB 举了一个很好的例子:

      要选择要使用的数据库,在 mongo shell 中,发出 use 语句,如下例所示:

      使用 myDB
      使用 myNewDB

      内容来自:https://docs.mongodb.com/manual/core/databases-and-collections/#databases

      收藏

      • 小写名称:避免区分大小写问题,MongoDB 集合名称区分大小写。

      • 复数:更明显地将某物的集合标记为复数,例如“文件”而不是“文件”

      • >无单词分隔符: 避免不同的人(错误地)分隔单词(用户名 用户名、名字
        名)。根据少数人的说法,这个有待商榷
        在这里,但前提是参数与集合名称隔离 我不认为它应该是 ;) 如果你发现自己在改进
        通过添加下划线或
        来提高您的收藏名称的可读性 camelCasing 您的收藏名称可能太长或应该使用
        适当的时期,这是收集的标准
        分类。

      • 更详细集合的点表示法: 给出集合之间如何相关的一些指示。例如你可以 有理由确定如果您删除了“users.pagevisits”,您可以删除 “用户”,前提是设计架构的人做得很好 工作。

      内容来自:https://web.archive.org/web/20190313012313/http://www.tutespace.com/2016/03/schema-design-and-naming-conventions-in.html

      对于集合,我会遵循这些建议的模式,直到找到官方 MongoDB 文档。

      【讨论】:

      • “小写名称:避免区分大小写问题” 仅当每个人都知道使用小写时。即使这样,引擎也应该能够识别(并且应该)“CollectionA”和“collectionA”之间没有逻辑区别2
      猜你喜欢
      • 2012-11-09
      • 2011-10-06
      • 2022-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 2015-09-11
      相关资源
      最近更新 更多