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

时间:2009-12-10 13:53:58

标签: database database-design

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

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

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

doctorsMain
doctorsProfiles
doctorsPatients
patientsMain
patientsProfiles
patientsAntecedents 

我关心的是:

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

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

12 个答案:

答案 0 :(得分:135)

保持一致远比你使用的特定方案重要。

答案 1 :(得分:16)

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

DoctorMain
DoctorProfile
DoctorPatient

它模仿我的应用程序中的类的命名约定,保持一切非常整洁,干净,一致,并且易于理解每个人。

答案 2 :(得分:10)

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

答案 3 :(得分:8)

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

答案 4 :(得分:8)

以上大部分内容的汇总:

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

然后,您可以轻松地在环境之间翻译(甚至自动)名称。

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

答案 5 :(得分:5)

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

从来没有过来。

答案 6 :(得分:5)

由于问题并非特定于特定平台或数据库引擎,我必须说最大程度的可移植性,您应该始终使用小写表名。

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

如其他地方所述, relation (表)名称应该是单数的:http://www.teamten.com/lawrence/programming/use-singular-nouns-for-database-table-names.html

答案 7 :(得分:4)

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

答案 8 :(得分:2)

这是我的五美分。我得出结论,如果来自不同供应商的数据库用于一个项目,有两种最佳方式:

  1. 使用下划线。
  2. 使用带引号的驼峰案例。
  3. 原因是某些数据库会将所有字符转换为大写,有些转换为小写。因此,如果您使用myTable,则在使用数据库时,它将变为MYTABLEmytable

答案 9 :(得分:1)

不幸的是,这个问题没有“最佳”答案。正如@David所说,一致性远比命名约定重要。

答案 10 :(得分:1)

如何分离单词的可变性很大,所以你必须选择你喜欢的任何东西;但与此同时,似乎有一种共识,即表名应该是单数。

答案 11 :(得分:0)

命名约定存在于一种语言的范围内,并且不同的语言具有不同的命名约定。

SQL默认情况下不区分大小写;因此,snake_case是一种广泛使用的约定。 SQL还支持定界标识符。因此,可以选择混合大小写,例如camelCase(Java,其中字段==列)或PascalCase(C#,其中表==类和列==字段)。如果您的数据库引擎不支持SQL标准,那就是它的问题。您可以决定使用该引擎,也可以选择其他引擎。 (而且为什么C#不得不与众不同,这对于同时使用两者进行编码的我们来说是一个令人沮丧的问题。)

如果您打算在服务和应用程序中仅使用一种语言,请在所有层使用该语言的约定。否则,请在使用该语言的领域中使用该语言中使用最广泛的约定。