繁体   English   中英

MySQL 是否有命名约定?

[英]Is there a naming convention for MySQL?

这是我的方法:

  1. 表名是小写的,使用下划线分隔单词,并且是单数(例如foofoo_bar等。
  2. 我通常(并非总是)有一个自动增量 PK。 我使用以下约定: tablename_id (例如foo_idfoo_bar_id等)。
  3. 当一个表包含一个作为外键的列时,我只是从它来自的任何表中复制该键的列名。 例如,假设表foo_bar具有 FK foo_id (其中foo_idfoo的PK)。
  4. 在定义 FK 以强制参照完整性时,我使用以下内容: tablename_fk_columnname (例如进一步示例 3,它将是foo_bar_foo_id )。 由于这是一个表名/列名组合,它保证在数据库中是唯一的。
  5. 我对列进行排序:PK、FK,然后按字母顺序排列其余列

有没有更好、更标准的方法来做到这一点?

我首先要说的是:保持一致。

我认为您几乎已经完成了您在问题中概述的约定。 不过有几点意见:

我认为第 1 点和第 2 点很好。

第 3 点 - 遗憾的是,这并不总是可能的。 想想您将如何处理具有列foo_idanother_foo_id的单个表foo_bar ,这两个列都引用了foofoo_id列。 您可能需要考虑如何处理此问题。 不过,这有点极端!

第 4 点 - 与第 3 点类似。您可能希望在外键名称的末尾引入一个数字,以适应具有多个引用列的情况。

第 5 点 - 我会避免这种情况。 当您想在以后从表中添加或删除列时,它为您提供的帮助很少,并且会变得很头疼。

其他一些要点是:

索引命名约定

您可能希望为索引引入命名约定——这对您可能想要执行的任何数据库元数据工作都有很大帮助。 例如,您可能只想调用索引foo_bar_idx1foo_idx1 - 完全取决于您,但值得考虑。

单数与复数列名

解决列名和表名中复数与单数的棘手问题可能是个好主意。 这个主题经常在 DB 社区引起大讨论 对于表名和列,我会坚持使用单数形式。 那里。 我说过了。

这里最重要的当然是一致性!

一致性是任何命名标准的关键。 只要它是合乎逻辑的和一致的,你就成功了 99%。

标准本身在很大程度上是个人喜好 - 所以如果你喜欢你的标准,那就用它吧。

直接回答你的问题 - 不,MySQL 没有首选的命名约定/标准,所以滚动你自己的就好了(你的似乎合乎逻辑)。

MySQL对其或多或少严格的规则有一个简短的描述:

https://dev.mysql.com/doc/internals/en/coding-style.html

Simon Holywell 最常见的 MySQL 编码风格:

http://www.sqlstyle.guide/

另请参阅此问题: 是否有任何已发布的 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 标准(区分大小写问题)。
  • 简称 简单明了。 最简单快捷的是识别您的表或列,效果更好。 相信我,当您在短时间内进行大量不同的查询时,最好让所有内容都易于编写(和阅读)。
  • 避免前缀 除非您对不同应用程序的表使用相同的数据库,否则不要使用前缀。 这只会为您的查询增加更多的冗长。 在某些情况下这可能很有用,例如,当您想要标识主键和外键时,通常表名用作 id 列的前缀。
  • 使用下划线分隔单词 如果您仍然想使用多个单词来命名表、列等,那么请使用下划线来分隔_the_words,这有助于提高可读性(您的眼睛和紧张的大脑会感谢您)。
  • 保持一致 一旦你有了自己的标准,就去遵循它。 不要成为制定规则的人,而不是第一个打破规则的人,这是可耻的。

那么“复数 vs 单数”命名呢? 嗯,这多半是个人喜好的情况。 就我而言,我尝试对表格使用复数名称,因为我认为表格是元素的集合或包含元素的包,因此复数名称对我来说很有意义; 以及列的单数名称,因为我将列视为对这些表元素进行单数描述的属性。

一致性是每个人都强烈建议的,其余的取决于你,只要它有效。

对于初学者来说,它很容易忘乎所以,我们当时可以命名任何我们想要的名字。 这在当时是有道理的,但稍后会令人头疼。

foo foobarfoo_bar很棒。 我们尽可能直截了当地命名我们的表格,如果它们是两个不同的词,则仅使用下划线。 studentregistrationstudent_registration

就像@Zbyszek 所说的那样,拥有一个简单的id就足以实现自动增量。 越简单越好。 为什么需要foo_id 我们很早就遇到了同样的问题,我们用表前缀命名所有列。 foo_idfoo_namefoo_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM