我是这样做的:
foo
foo_bar
tablename_id
foo_id
foo_bar_id
tablename_fk_columnname
foo_bar_foo_id
有没有更好,更标准的方法来做到这一点?
值得庆幸的是,PHP开发人员并不像我所知道的一些开发社区那样是“骆驼案例偏执狂”。
你的会议听起来不错。
只要它们a)简单,B)一致-我看不出任何问题:)
附言: 就我个人而言,我认为5)是矫枉过正。
一致性是任何命名标准的关键。只要它是合乎逻辑和一致的,你就是99%。
标准本身是非常个人偏好-所以如果你喜欢你的标准,然后运行它。
直接回答你的问题——不,MySQL没有首选的命名约定/标准,所以使用你自己的命名约定/标准是很好的(你的似乎是合乎逻辑的)。
我首先要说的是:保持一致。
我认为你在你的问题中概述的惯例已经差不多了。不过有几条评论:
我认为第一点和第二点是好的。
第3点-遗憾的是,这并不总是可能的。考虑如何处理 foo_bar 的单个表,该表有 foo_id 和 another_foo_id 两列,这两个列都引用了foo 表的 foo_id 列。你可能要考虑如何处理这件事。不过,这是一个有点极端的情况!
another_foo_id
第4点-与第3点类似。您可能希望在外键名的末尾引入一个数字,以满足多个引用列的需要。
第5点-我会避免这样做。它为您提供的功能很少,并且当您以后想要在表中添加或删除列时,它将成为一个令人头疼的问题。
其他几点是:
索引命名约定
您可能希望引入索引的命名约定-这将对您可能想要执行的任何数据库元数据工作有很大的帮助。例如,您可能只想调用索引foo_bar_idx1或foo_idx1-完全由您决定,但值得考虑。
foo_bar_idx1
foo_idx1
单数与复数列名
解决列名和表名中的复数与单数的棘手问题可能是个好主意。该主题经常在DB社区中引起大型辩论。对于表名和列,我将坚持使用单数形式。那里。我说过了。
这里最重要的当然是一致性!
MySQL对其或多或少严格的规则有一个简短的描述:
https://dev.mysql.com/doc/internals/en/coding-style.html.
Simon Holywell的MySQL最常见的编码风格:
http://www.sqlstyle.guide/.
见这个问题: 是否有任何已发布的SQL编码风格指南?
答案很简单:否
好吧,至少Oracle或社区鼓励这样的命名约定,不,但是,基本上您必须知道遵循标识符的规则和限制,如MySQL文档中所示:https://dev.mysql.com/doc/refman/8.0/en/identifiers.html
关于您遵循的命名约定,我认为这是可以的,只是数字5有点不必要,我认为大多数用于管理数据库的可视化工具都提供了对列名进行排序的选项(我使用DBeaver,它有这个选项),因此,如果您的目的是对您的表进行很好的可视化演示,您可以使用我提到的这个选项。
根据个人经验,我推荐这家酒店:
lower_case_table_names
那“复数”和“单数”呢?命名?嗯,这主要是个人喜好的情况。在我的例子中,我尝试为表使用复数名称,因为我认为表是元素的集合或包含元素的包,所以复数名称对我来说是有意义的。以及列的单数名称,因为我将列视为以单数形式描述这些表元素的属性。
一致性是每个人都强烈建议的,其余的取决于你,只要它能起作用。
对于初学者来说,很容易忘乎所以,我们在那个时候想说什么就说什么。这在当时是有意义的,但之后会让人头疼。
foofoobar或foo_bar过大。 我们尽可能直接地命名我们的表,并且只有当它们是两个不同的单词时才使用下划线。studentregistration到student_registration
foobar
studentregistration
student_registration
正如@zbyszek所说,拥有一个简单的id对于自动增量来说已经足够了。越简单越好。为什么需要foo_id?我们在早期遇到了同样的问题,我们用表前缀命名所有的列。如foo_id,foo_name,foo_age。我们现在删除了表名,只保留尽可能短的COL.
id
foo_name
foo_age
由于我们只为PK使用一个ID,因此我们将使用foo_bar_fk(表名是唯一的,后面是唯一的PK,后面是_fk)作为外键。我们没有将id添加到COL名称中,因为据说名称“ ID ”始终是给定表的PK.因此,我们在末尾只有表名和_fk。
foo_bar_fk
_fk
对于约束,我们删除所有下划线,并使用驼峰式(表名+列名+FK)foobarUsernameFk(对于用户名_FK COL)进行连接。这只是我们遵循的一种方式。我们为每个名称和结构保留了一个文档。
foobarUsernameFk
在保持COL名称简短的同时,我们还应关注受限制的名称。
+------------------------------------+ | foobar | +------------------------------------+ | id (PK for the current table) | | username_fk (PK of username table) | | location (other column) | | tel (other column) | +------------------------------------+