表命名:下划线与Camelcase?命名空间?奇异与多元?

Mar*_*lde 78 database database-design

我一直在阅读StackOverflow上的几个问题/答案,试图找到"最好的",或者我应该说是必须接受的方式,来命名数据库上的表.

大多数开发人员倾向于根据需要数据库的语言(JAVA,.NET,PHP等)命名表.但是我觉得这不对.

到目前为止,我一直在命名表的方式是:

doctorsMain
doctorsProfiles
doctorsPatients
patientsMain
patientsProfiles
patientsAntecedents 
Run Code Online (Sandbox Code Playgroud)

我关心的是:

  • 易读性
  • 快速识别表格所在的模块(医生||患者)
  • 易于理解,以防止混淆.

我想阅读有关命名约定的任何意见.谢谢.

Dav*_*ill 150

保持一致远比您使用的特定方案重要.

  • 换句话说,是的,做得好,你已经确定了一些一致的方案.继续吧! (18认同)
  • 评论为+1.此外,在当前命名方案的旁注中,PascalCase更好,特别是如果您不为SQL查询使用别名.这样您就可以在表名列表上使用camelcase,在表名上使用Pascal Case. (3认同)
  • 表名的 Pascal/camel 大小写可能会导致一些问题。每个表在文件系统中都会有一个文件,其中一些不区分大小写(例如 OSX)。 (3认同)
  • @ismriv如果你不一致只是一个问题,如果你总是**引用具有相同一致情况的表/视图/列,你应该没有任何问题,写这些名字时不会懒惰在阅读后获得一大优势.对表使用PascalCase和对列使用camelCase有助于一目了然地识别名称的类型,并且还模仿常见的面向对象的约定. (2认同)

Jus*_*ner 18

我通常使用PascalCase,实体是单数的:

DoctorMain
DoctorProfile
DoctorPatient
Run Code Online (Sandbox Code Playgroud)

它模仿了我的应用程序中类的命名约定,使每个人都能保持整洁,干净,一致且易于理解.

  • @SinthiaV 作为无用的评论,这可能是在实际的 SO 问题的上下文中,PascalCase 与 CamelCase 不同。PascalCase 将每个单词的第一个字母大写(重要的是包括第一个字母),而 CamelCase 仅将第一个单词之后的单词大写。进一步阅读:https://medium.com/better-programming/string-case-styles-camel-pascal-snake-and-kebab-case-981407998841 (5认同)
  • 是的......是的,我做的.今天早上我有点迷雾.编辑...谢谢. (3认同)
  • 它也被称为"CapitalCase". (3认同)
  • 在我30年的工作经验中,我从未听说过它叫做“ CapitalCase”。我听说它最常被称为“骆驼案”,而“帕斯卡案”则最近才被使用。我来这里是为了了解为什么人们在历史上对大小写几乎不敏感的情况下似乎对SQL使用驼峰式大小写。我当然不想落后于时代。 (3认同)
  • (七年半后......)在西雅图附近的我的大学里,几位教授教导孩子们“大写字母”是当地企业中更安全的称呼方式,而“帕斯卡大小写”是你要避免说的东西如果你不想在面试时显得太“老”。 (3认同)

ter*_*R0Q 10

SQL支持不区分大小写的本质Underscores_Scheme.然而,现代软件支持任何类型的命名方案.然而,有时一些令人讨厌的错误,错误或人为因素可能会导致UPPERCASINGEVERYTHING选择这两个Pascal_CaseUnderscore_Case计划的人生活在他们所有的神经中.


Ray*_*Ray 8

我使用下划线.几年前我做了一个Oracle项目,看起来Oracle强迫我所有的对象名称都是大写的,这会打击任何套管方案.我不是一个真正的甲骨文家伙,所以也许有一种解决方法,我不知道,但它让我使用下划线,我从来没有回去过.

  • 在11g及以上,如果表名用双引号括起来,则似乎保留了大小写.把它放在这里供将来参考.我肯定知道Postgres也这样做,其他数据库引擎可能没有. (2认同)

Ken*_*Far 8

以上大部分内容的汇总:

  • 不要依赖数据库中的大小写
  • 不要考虑名称的情况或分隔符部分 - 只是单词
  • 使用任何分隔符或大小写是您的语言的标准

然后,您可以轻松地在环境之间转换(甚至自动)名称.

但我还要补充一点:当你从应用程序中的类移动到数据库中的表时,你可能会发现还有其他因素:数据库对象有视图,触发器,存储过程,索引,约束等等 - 还需要名字.因此,例如,您可能会发现自己只能通过视图访问表,这些视图通常只是一个简单的"select*from foo".这些可以标识为只有后缀"_v"的表名,或者您可以将它们放在不同的模式中.这种简单抽象层的目的是在必要时可以扩展它以允许在一个环境中进行更改以避免影响另一个环境.这不会打破上述命名建议 - 只需要考虑一些其他事项.


Mar*_*dle 6

我倾向于同意那些说这取决于你正在使用的语言惯例的人(例如,用于C#的PascalCase和用于Ruby的snake_case).

但是,从来没有骆驼过.

  • 当您想使用两种具有不同命名约定的不同语言访问同一张表时,这没有任何意义。 (4认同)
  • Ada:Pascal_Case_With_Underscores (2认同)

ric*_*mer 6

由于该问题并非特定于特定的平台或数据库引擎,因此,为了最大程度地实现可移植性,我必须始终使用小写的表名。

/ [a-z _] [a-z0-9 _] * /实际上是唯一可以在不同平台之间无缝转换的名称模式。小写字母数字和下划线将始终保持一致。

如其他地方所述,关系(表)名称应为单数形式:http : //www.teamten.com/lawrence/programming/use-singular-nouns-for-database-table-names.html


Vla*_*șan 5

在阅读了许多其他意见之后,我认为使用语言的命名约定非常重要,仅当您(并将成为)应用程序的唯一开发人员时,一致性比命名约定更重要。如果需要可读性(这非常重要),则最好为每种语言使用命名约定。例如,在MySQL中,我不建议使用CamelCase,因为并非所有平台都区分大小写。因此,这里的下划线会更好。

  • 绝对同意!!!特别是对于 MySql,当你在 Windows 上运行它时,一切都会从“camelCase”变为“camelcase”。所以有蛇盒就更好了。另外,关于“现代软件支持任何类型的命名方案”,您无法保证您将为最新版本的软件编写代码。特别是对于数据库 - 当您考虑回归成本时,版本更新并不是微不足道的。 (2认同)