sql - 正确命名表的 id 字段

标签 sql database database-design data-modeling

我目前正在阅读 Joe Celko 撰写的《SQL Programming Style》一书。

在第一章的“开发标准化后缀”段落中,他为 id 列指出:

"_id" = identifier. It is unique in the schema and refers to one entity anywhere it appears in the schema. Never user ">table_name<_id"

几页之后他说

Do not use an underscore as the first or last letter in a name. It looks like the name is missing another component.

他弃用了“id”作为列名。

所以我想知道你们如何命名 id 列?

我知道大多数人可能会认为这个问题有什么意义,但我正在寻求标准化我的数据模型,尽可能遵循行业标准和 ISO 标准。

最佳答案

我也反对使用“Id”作为列名,尽管它已经变得非常普遍。 “EmployeeId”比“Id”长,但更具描述性。它还允许外键通常与其引用的列具有相同的名称。当数据库的控制权从一个人转移到另一个人时,这非常有用。

上面有一个异常(exception)。同一个表中可能有两个外键都引用同一个键。也可以有一个自反外键,它引用出现在同一个表的不同行中的键。

让我举一个自反键的例子。您有一张员工表,其中包含键 EmployeeId。您还有一个名为 SupervisorId 的列,它记录了主管和多个下属之间的关系。在这种情况下,外键的名称命名的是角色,而不是实体。

作为替代方案,可以使用用户定义的域来记录两列引用同一事物的事实。同样,当必须将数据的基本含义传达给新的人时,这是最有用的。

将下划线用作符号内的内部视觉分隔符是一个完全可分离的问题。 Camelcasing 比下划线更普遍,甚至有些系统不允许下划线作为符号组成部分。

最重要的是,保持一致。如果您使用武断、反复无常且自相矛盾的命名约定,您最终甚至会把自己弄糊涂。

关于sql - 正确命名表的 id 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4240314/

相关文章:

mysql - 根据另一个表中的记录更新 SQL 记录

database - MongoDB 是否可以只更新部分文档?

mysql - 用于论坛的 CouchDB?

sql - 函数不返回预期值

c# - 使用单个更新查询更改表中的多个值

python - Django - 单真 bool 字段

database - 保持 PostgreSQL (FDW) 外部模式同步

php - 网页游戏的数据库建模

mysql - 如何为列选择优化数据类型 [innodb specific]?

SQL Azure 无法识别我的聚集索引