在命名表时使用下划线更好还是使用camelcase更好?
例如:table_name或tableName哪一个更好?是否有理由使用这两种方法,是什么?
- 简短的回答:这取决于你,选择你喜欢的任何东西。另请参见:stackoverflow.com/questions/1847235/…
- 啊,聪明的家伙……非常感谢你的链接……非常感谢。
- 大多数SQL实现都是独立于大小写的,因此"stuff"、"stuff"和"stuff"引用同一个表。
- 基本上只要你始终如一,一切都会发生:)
- 他们应该叫鲍比!
- 有关区分大小写和SQL实现的详细信息,请参阅stackoverflow.com/questions/153944/is-sql syntax case sensit‌&8203;ive。
- 请参阅xkcd.com/327,了解应清除数据库输入的原因。
一些数据库引擎不区分大小写,并且确实会将某些输出的名称转换为所有小写。因此,我开始在单词之间使用下划线,并使用所有小写字母。
我记得MySQL尊重这个案例,所以这对您来说不是一个直接的问题。但有一次,当我不得不将一个数据库从一个引擎移植到另一个引擎时——我想是从MySQL移植到Oracle,但我不会发誓——我们所有的camercase名称突然变成了一起运行的名称。
我还将在最重要的一点是一致性方面仅次于罗伯特·博克。当我们讨论这个问题时,我能对字段名的一致性做一个切题的评论吗?我现在正在使用一个系统,在这个系统中,我发现一个表中的字段"proid"实际上与另一个表中的"style"内容完全相同,另一个系统在一个表中有"delivereddate"和在另一个表中有"date delivered"。
我读到的所有内容都表明,最好的约定是对数据库名和表名都使用小写。如果需要将多个单词放在一起,请用下划线分隔它们——避免在表名中使用连字符,否则每次引用它们时,都必须对所有表名和数据库名进行反勾选。
此外,以下配置参数可能与您的要求有关:
1 2 3 4 5 6 7 8
| mysql > show global variables like 'lower%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_file_system | OFF |
| lower_case_table_names | 0 |
+------------------------+-------+
2 rows in set (0.00 sec ) |
关于字段名,我倾向于使用驼色大小写。
我相信许多RDBMSE忽略了案例,所以使用camel案例命名方案可能根本不起作用。
重要的是要让列名和表名具有描述性,不管您决定什么挑剔的语法。如果它们描述了它们的数据,没有人会关心您是否使用了驼色大小写、下划线等。
- 不同意,我正在使用一个传统的数据库,在这个数据库中,人们不喜欢在初始设计中使用标准,这使得维护起来更加困难。挑选和标准化,并始终如一地使用它。
- 你能解释一下你所说的标准是什么意思吗?您的意思是在语法方面(使用camelcase、使用下划线、始终使用大写SQL)还是内容方面(让列描述其数据、将数据格式化为hh:mm:ss、格式化)?我认为在开发人员身上强制执行数据库没有的语法是有害的(IME程序员对此过于简单;它只会引发宗教斗争)。但就内容而言,我认为在标准/指导方针中可以讨论这一点。
- 我还想补充一点,HLGEM有一点——一定程度的一致性是必要的。例如,包含共享ID的列应该在特定模式中的数据库表之间具有相同的名称。我不是在提倡这里人人免费。
我的首选是使用描述性名称和pascal大小写(tablename)。
避免使用缩写,如果必须使用缩写,请将其视为一个词(使用daylightsavingsTimeInfo或dstinfo而不是dstinfo)。
命名并不是一个单一的正确答案,所以最好的方法是选择一些东西并保持一致。最糟糕的是有许多标准的混杂。
我对此的看法是,如果世界上最好的命名约定(对于编写它的人)感觉不到自然,那么你应该做任何对你来说自然的事情,而且每次设计数据库时你都必须阅读文档,这是不好的。
你应该做任何对你方便的事情,做那些从你的键盘流出的事情。
根据我的经验,有一段时间我从.NET迁移到了RoR,我经常看到人们做这些事情,并在我的表中加上下划线,但不久之后,我忽略了这个选项,因为我以前的SQL命名很方便。
对于列也是如此。
祝你好运
- 不,团队应该在一个标准上达成一致,并且每个人都应该使用它(如果开发人员不遵循这个标准,代码审查应该将其撕碎)。没有牛仔编码,每个人都使用他们觉得最适合的标准。我最后工作的地方不使用标准表格,因为我对那个地方感到舒服,而不是这个组织所需要的那种地方也不需要废话。
- @在一个团队中工作是一个完全不同的歌剧。当在一个团队中工作或管理一个团队时,一定要有一个由经理制定的惯例。
- @我必须同意肯索德夫的观点。您的评论,无论是有意还是无意,都会让开发人员直接接受编码标准。标准不是一件坏事,但我的经验是,它们是为去年的战斗而设计的,而不是今年的战斗。毫无疑问,我们可以从中吸取一些东西,并在今后应用。但是,当游戏规则发生变化时(新的语言、要解决的新问题、新的编码技术),在人们身上实施编码标准确实使我对编码标准的概念产生了反感。你经常更新你的标准吗?
- 是的,我想让开发人员直接接受数据库编码标准。这并不是随着数据库版本的变化而变化的。在没有数据库标准的地方维护数据库是很困难的,没有人能记住所使用的人员ID的所有可能的变化,或者这个表是否使用下划线,如果不使用下划线,那么在编写SQL时会浪费很多时间。所以,是的,我需要标准,并希望管理层强制执行。无论是编码标准、着装规范还是工作时间,不遵守公司标准都是不专业的。
- @hlgem-我更清楚地看到你的观点,尤其是在有相同数据的列之间保持相同的名称,比如person_id。我猜数据库技术并没有改变那么多,我的评论也不适用。您是否认为将RDBMS的编码标准应用于"nosql"或"document"类型的数据库是一件好事?我问,因为我想更好地理解你的观点。谢谢你的评论。
- 我认为,如果您移动到一个nosql或文档数据库,您将拥有与RDBMS标准不同的标准。就像C的标准与数据库标准不同一样。在为新技术开发一个新的标准时,您可能会考虑旧的标准(毕竟您的开发人员会习惯旧的标准,而更改实际上可能会使他们更难适应,或者,如果他们有新的标准,它可能会使他们更容易在新的范式中思考)。
而不是向您提供关于这一点的几个原因的简短反馈,我将提供到PinalDave的SQL编码指南的链接。他们已经被很好地考虑,解释和似乎遵循我自己的偏好,在事物应该如何命名和使用等。
享受!
- 非常感谢Brian的链接…
- 虽然是特定于SQL Server的,但仍然是一个很好的参考。
- 但我不能说我同意这一切。不应该以sp开头的存储过程命名,因为SQL Server将首先查找系统过程,因此在每次调用中都会损失一点点性能。
- @hglem我认为这取决于您的偏好、代码性能而非编码标准/可维护性等。我并不是说sp_u是根据您提到的原因命名存储过程的方法,但至少它促进了一致性。+不过,对我来说,这是一个新的。-)
- HLGEM-您的代码需要高性能吗?
我说,在代码中使用任何命名约定来访问高级结构(如类)。
例如,如果将数据*封装在一个名为userinfo的类中,那么该表也应该称为userinfo。
*你在封装数据,对吗?