【发布时间】:2011-12-15 11:58:48
【问题描述】:
我是这样做的:
- 表名小写,使用下划线分隔单词,并且是单数(例如
foo、foo_bar等 - 我通常(并非总是)有一个自动增量 PK。我使用以下约定:
tablename_id(例如foo_id、foo_bar_id等)。 - 当表包含作为外键的列时,我只需从它来自的任何表中复制该键的列名。例如,假设表
foo_bar具有 FKfoo_id(其中foo_id是foo的 PK)。 - 在定义 FK 以强制执行参照完整性时,我使用以下代码:
tablename_fk_columnname(例如,进一步扩展示例 3,它将是foo_bar_foo_id)。由于这是一个表名/列名组合,因此保证在数据库中是唯一的。 - 我按如下方式对列进行排序:PK、FK,然后按字母顺序排列其余列
有没有更好、更标准的方法来做到这一点?
【问题讨论】:
-
自动递增 PK 只使用“id”是错误的吗?为什么?列的名称仅在表的上下文中才有意义。所以我在每个表中都有一个“id”,并且可能有很多 id_
用于 FK。 -
@Zbyszek 我认为最简单的反对理由只是为了一致性/简单性。而不是
id_tableB=> oh no 不同名称的列id,id_tableB=>id_tableB的一致性看起来更整洁......正如 OP 所做的那样:foo_id=>foo_id而不是foo_id=>id -
这是一个很好的方法。我使用的几乎相同,但对于表名,我使用复数表示“根”表,使用单数表示依赖项。例如:公司和 company_sector。
-
“表名 (...) 是单数的”,这在计算机工程数据库类中会立即失败。不是因为命名约定,而是因为“表”是一组东西。如果是单一的,则表明设计不佳。
标签: mysql naming-conventions mysql-workbench