繁体   English   中英

命名MYSQL id列

[英]Naming the MYSQL id column

命名作为mysql表主键的列的最佳实践是什么? 我见过两种方法:

  1. 'ID'
  2. tableName_id(其中tableName替换表的名称)。

我原本以为只需id就足够了,因为你仍然可以通过选择一个句号和表名来继续来唯一地识别列(即对于表'cars'中的列'id',你可以选择它作为汽车。ID)

还是我过分思考这一切?

我通常将它们命名为[tblname] _id。 原因很简单。 假设我有两张桌子:

member
    member_id
    member_alias
    ...

post
    post_id
    member_id
    post_text
    ...

现在我可以使用MySQL的USING语法加入它们,并为每个连接保存几个字符:

SELECT post.*, member_id, member_alias FROM post
    INNER JOIN member USING (member_id)

当然,这主要是主观的。

除了作为SQL数据库之外,MySQL没有特别考虑。 所以问题就变成了SQL数据库应该使用什么命名约定。

注意到您可以随意命名列(在允许的名称范围内),在评估最佳名称选择时,请考虑:

  1. 名称与SQL语言功能交互的方便程度 - 尤其是联接?
  2. 名字有多好帮助理解?

关于1,考虑:

  • USING子句如何表现?
  • NATURAL JOIN子句如何表现?
  • 当来自不同源表的非连接列具有相同名称并且是SELECTed时,INNER JOIN如何表现? (尽管SQL允许使用虚线名称来推迟冲突 - 但这并不会扩展到子查询。)

关于2,考虑到随着你的架构的发展,什么是主要的可能变成外来的。 什么是可能变得很多。 仅因为基数更改而重命名列有帮助吗?

最后,请考虑单列主键并不总是人为键。 在这个例子中,它实际上可能是一个外键(1-1关系):

任务{task_id,task_created_date} - 在task_created_date上创建了task_id的任务

TASK_DUE {task_id,task_due_date} - 任务与task_id到期due_date

我对当前表的主键使用“ID”,对外键字段使用tableName_id,但它通常归结为个人偏好。

我曾在使用tblMyTable作为表名的公司工作,然后将其用作表中每个字段的前缀。 我不喜欢这样做。

我总是去tablename_id。 这样我可以使用USING。

此外,如果你是坏的并且没有在多表连接中指定表别名,那么你的sql会更加清晰。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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