命名MYSQL id列

时间:2010-11-01 11:09:46

标签: mysql

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

  1. 'id'
  2. tableName_id(其中tableName替换表的名称)。
  3. 我原以为id就足够了,因为你仍然可以通过选择一个句点和表名继续列来唯一地识别列(即对于表'cars'中的列'id',你可以选择它作为cars.id)

    还是我过分思考这一切?

4 个答案:

答案 0 :(得分:5)

我通常将它们命名为[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)

当然,这一切都是主观的。

答案 1 :(得分:2)

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

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

  1. 名称与SQL语言功能交互的方便程度 - 特别是连接?
  2. 这些名字有多好帮助理解?
  3. 关于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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

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