2010-11-01 82 views
7

命名作爲mysql表主鍵的列的最佳做法是什麼?我已經看到了兩種方式:命名MYSQL id列

  1. 「身份證」
  2. tableName_id(其中tablename是代替表的名稱)。

我以爲只要id就足夠了,因爲你仍然可以通過選擇由一個句點和表名(即表'汽車'中'id''列'')的列來唯一標識列,你可以選擇它作爲cars.id)

或者我過度思考這一切?

+1

咦是因爲? 'tableName_id'通常用於外部關係字段,而不是表格本身,是嗎? – 2010-11-01 11:12:03

+0

這已被問了很多次。通常這些問題只會導致火焰。 – Quassnoi 2010-11-01 11:12:44

回答

4

我通常將它們命名爲[tblname] _id。原因很簡單。比方說,我有兩個表:

member 
    member_id 
    member_alias 
    ... 

post 
    post_id 
    member_id 
    post_text 
    ... 

現在我可以使用語法MySQLs加入他們的行列,並保存一些字符爲每個加盟:

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

當然,這是所有主要是主觀的。

+0

如果2個表有多個關係會怎麼樣? – symcbean 2010-11-01 13:39:58

+0

這確實很主觀,特別考慮到你可以使用表名引用任何列:member.id和post.id.如果你的語法需要顯式引用表,你會得到member.member_id和post.post_id,這看起來很多餘。 – Mark 2014-10-01 20:32:52

1

我使用「ID」作爲當前表的主鍵和tableName_id作爲外鍵字段,但通常歸結爲個人偏好。

我曾在使用tblMyTable作爲表名的公司工作,然後將它用作表中每個字段的前綴。我不喜歡這樣做。

1

我總是去tablename_id。這樣我可以使用USING。另外,如果你不好,並且沒有在多表連接中指定表別名,那麼你的sql會稍微更清晰一些。

2

除了作爲一個SQL數據庫之外,MySQL不會帶來任何特定的考慮因素。所以問題變成了什麼命名約定應該用於SQL數據庫。

注意到你真的可以命名任何你喜歡(允許名稱的範圍內),評估的名字的時候最好選擇,考慮列:

  1. 如何方便地將名字與SQL語言功能互動 - 特別加入?
  2. 這些名字有助於理解嗎?

關於1,審議:

  • 如何使用該條款的行爲?
  • NATURAL JOIN子句的行爲如何?
  • 如果INNER JOIN在來自不同源表的非連接列具有相同名稱並被選擇時如何工作? (儘管SQL允許虛線名稱推遲衝突 - 這不會延伸到子查詢。)

關於2,考慮到隨着您的模式的發展,初級可能會變成外來的。什麼是可能會變得很多。是否有助於重新命名列,因爲基數發生了變化?

最後,考慮一個單列主鍵並不總是一個人工鍵。在這個例子中它實際上可能是一個外鍵(1-1關係):

TASK {TASK_ID,task_created_date} - 任務與TASK_IDtask_created_date

TASK_DUE {TASK_ID創建, task_due_date} - 與任務TASK_IDDUE_DATE