我是这样做的:
有更好,更标准的方法吗?
答案 0 :(得分:90)
我首先要说的是:保持一致。
我认为你几乎已经有了你在问题中概述的约定。但有几条评论:
我认为第1点和第2点都很好。
第3点 - 遗憾的是,这并不总是可行的。考虑一下如何处理列foo_bar
和foo_id
的单个表another_foo_id
,这两个列都引用了foo
表foo_id
列。您可能想要考虑如何处理这个问题。这虽然是一个小问题!
第4点 - 与第3点类似。您可能希望在外键名称的末尾引入一个数字,以满足具有多个引用列的要求。
第5点 - 我会避免这种情况。当你想在以后添加或删除表中的列时,它会为你提供很少的东西,并且会变得很头疼。
其他一些观点是:
索引命名约定
您可能希望为索引引入命名约定 - 这对您可能要执行的任何数据库元数据工作都有很大帮助。例如,您可能只想调用索引foo_bar_idx1
或foo_idx1
- 完全取决于您,但值得考虑。
奇异与多列名称
在列名和表名中解决复数与单一的棘手问题可能是个好主意。此主题通常会导致数据库社区中出现big debates。我会坚持使用表名和列的单数形式。那里。我说过了。
这里的主要内容当然是一致性!
答案 1 :(得分:17)
一致性是任何命名标准的关键。只要它合乎逻辑且一致,那么你就是99%。
标准本身就是个人偏好 - 所以如果你喜欢你的标准,那么就用它来运行。
直接回答你的问题 - 不,MySQL没有首选的命名约定/标准,所以滚动你自己就好了(你的看似合乎逻辑)。
答案 2 :(得分:7)
MySQL对其或多或少严格的规则进行简短描述:
https://dev.mysql.com/doc/internals/en/coding-style.html
Simon Holywell最常用的MySQL编码方式:
另见这个问题: Are there any published coding style guidelines for SQL?
答案 3 :(得分:4)
值得庆幸的是,PHP开发人员不像我所知道的一些开发社区那样是“Camel case bigots”。
您的惯例听起来不错。
只要它们很简单,并且b)一致 - 我没有看到任何问题:)
PS: 就个人而言,我认为5)是过度杀伤......
答案 4 :(得分:1)
简单答案:否
好吧,至少是Oracle或社区鼓励的命名约定,但是,基本上没有,您必须了解标识符的规则和限制,例如MySQL文档中指示的内容:https://dev.mysql.com/doc/refman/8.0/en/identifiers.html < / p>
关于您遵循的命名约定,我认为还可以,只是数字5有点多余,我认为大多数用于管理数据库的可视化工具都提供了对列名称进行排序的选项(我使用DBeaver,并且有它),因此,如果用户对您的桌子有很好的视觉效果,则可以使用我提到的此选项。
根据个人经验,我建议这样做:
lower_case_table_names
的配置不正确,您的服务器仅通过简单地识别您的camelCase或PascalCase标准就开始引发错误(区分大小写的问题)。“复数与单数”命名又如何呢?好吧,这多数是个人喜好的情况。就我而言,我尝试为表使用复数名称,因为我认为表是元素的集合或包含contains元素的包,因此复数名称对我来说很有意义;和列的单数名称,因为我将列看作是对这些表元素单数描述的属性。
答案 5 :(得分:0)
@ fabrizio-valencia表示使用小写字母。在Windows中,如果您导出mysql数据库(phpmyadmin),则表名将转换为小写,这将导致各种 问题。 参见Are table names in MySQL case sensitive?
答案 6 :(得分:0)
一致性是每个人都强烈建议的,其余的取决于您,只要它可行。
对于初学者来说,它很容易被带走,我们可以命名当时想要的任何东西。在那时,这是合理的,但后来却令人头疼。
foo
foobar
或foo_bar
很棒。
我们尽可能直接为表命名,如果它们是两个不同的词,则仅使用下划线。 studentregistration
至student_registration
就像@Zbyszek说的那样,拥有一个简单的id
足以满足自动递增的需求。越简单越好。为什么需要foo_id
?早期我们有同样的问题,我们用表前缀命名所有列。例如foo_id
,foo_name
,foo_age
。现在,我们删除了表名,并仅将col尽可能短。
由于我们仅使用PK的ID,因此将使用foo_bar_fk
(表名是唯一的,后跟唯一的PK,后跟_fk
)作为外键。我们不将id
添加到列名,因为据说名称'id'始终是给定表的PK。因此,我们只有表名和结尾的_fk
。
对于约束,我们删除所有下划线并与camelCase(表名+姓氏+ Fk)foobarUsernameFk
(对于username_fk col)一起加入。这只是我们遵循的一种方式。我们为每个名称结构保留一个文档。
在使col名称简短时,我们还应注意RESTRICTED名称。
+------------------------------------+
| foobar |
+------------------------------------+
| id (PK for the current table) |
| username_fk (PK of username table) |
| location (other column) |
| tel (other column) |
+------------------------------------+