[英]Is there a naming convention for MySQL?
这是我的方法:
foo
、 foo_bar
等。tablename_id
(例如foo_id
、 foo_bar_id
等)。foo_bar
具有 FK foo_id
(其中foo_id
是foo
的PK)。tablename_fk_columnname
(例如进一步示例 3,它将是foo_bar_foo_id
)。 由于这是一个表名/列名组合,它保证在数据库中是唯一的。有没有更好、更标准的方法来做到这一点?
我首先要说的是:保持一致。
我认为您几乎已经完成了您在问题中概述的约定。 不过有几点意见:
我认为第 1 点和第 2 点很好。
第 3 点 - 遗憾的是,这并不总是可能的。 想想您将如何处理具有列foo_id
和another_foo_id
的单个表foo_bar
,这两个列都引用了foo
表foo_id
列。 您可能需要考虑如何处理此问题。 不过,这有点极端!
第 4 点 - 与第 3 点类似。您可能希望在外键名称的末尾引入一个数字,以适应具有多个引用列的情况。
第 5 点 - 我会避免这种情况。 当您想在以后从表中添加或删除列时,它为您提供的帮助很少,并且会变得很头疼。
其他一些要点是:
索引命名约定
您可能希望为索引引入命名约定——这对您可能想要执行的任何数据库元数据工作都有很大帮助。 例如,您可能只想调用索引foo_bar_idx1
或foo_idx1
- 完全取决于您,但值得考虑。
单数与复数列名
解决列名和表名中复数与单数的棘手问题可能是个好主意。 这个主题经常在 DB 社区引起大讨论。 对于表名和列,我会坚持使用单数形式。 那里。 我说过了。
这里最重要的当然是一致性!
一致性是任何命名标准的关键。 只要它是合乎逻辑的和一致的,你就成功了 99%。
标准本身在很大程度上是个人喜好 - 所以如果你喜欢你的标准,那就用它吧。
直接回答你的问题 - 不,MySQL 没有首选的命名约定/标准,所以滚动你自己的就好了(你的似乎合乎逻辑)。
MySQL对其或多或少严格的规则有一个简短的描述:
https://dev.mysql.com/doc/internals/en/coding-style.html
Simon Holywell 最常见的 MySQL 编码风格:
另请参阅此问题: 是否有任何已发布的 SQL 编码风格指南?
值得庆幸的是,PHP 开发人员不像我所知道的某些开发社区那样是“骆驼案例偏执狂”。
你的约定听起来不错。
只要它们 a) 简单,并且 b) 一致 - 我看不出任何问题:)
PS:就个人而言,我认为 5) 是矫枉过正...
简单回答:否
好吧,至少是 Oracle 或社区鼓励的命名约定,不,但是,基本上您必须注意遵循标识符的规则和限制,例如 MySQL 文档中所示: https : //dev.mysql.com /doc/refman/8.0/en/identifiers.html
关于您遵循的命名约定,我认为可以,只是数字 5 有点不必要,我认为大多数用于管理数据库的可视化工具都提供了对列名进行排序的选项(我使用 DBeaver,它有),所以如果目的是对你的桌子有一个很好的视觉呈现,你可以使用我提到的这个选项。
根据个人经验,我会推荐这个:
lower_case_table_names
配置不正确,您的服务器开始抛出错误,只是因为无法识别您的驼峰命名法或 PascalCase 标准(区分大小写问题)。那么“复数 vs 单数”命名呢? 嗯,这多半是个人喜好的情况。 就我而言,我尝试对表格使用复数名称,因为我认为表格是元素的集合或包含元素的包,因此复数名称对我来说很有意义; 以及列的单数名称,因为我将列视为对这些表元素进行单数描述的属性。
一致性是每个人都强烈建议的,其余的取决于你,只要它有效。
对于初学者来说,它很容易忘乎所以,我们当时可以命名任何我们想要的名字。 这在当时是有道理的,但稍后会令人头疼。
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
添加到 col 名称,因为据说名称 'id' 始终是给定表的 PK。 所以我们只有表名和_fk
最后。
对于约束,我们删除所有下划线并使用驼峰命名法 (tablename + Colname + 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) |
+------------------------------------+
正如@fabrizio-valencia 所说,使用小写。 在 Windows 中,如果您导出 mysql 数据库 (phpmyadmin),表名称将转换为小写,这会导致各种问题。 请参阅MySQL 中的表名是否区分大小写?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.