[英]Is there a naming convention for MySQL?
這是我的方法:
foo
、 foo_bar
等。tablename_id
(例如foo_id
、 foo_bar_id
等)。foo_bar
具有 FK foo_id
(其中foo_id
是foo
的PK)。tablename_fk_columnname
(例如進一步示例 3,它將是foo_bar_foo_id
)。 由於這是一個表名/列名組合,它保證在數據庫中是唯一的。有沒有更好、更標准的方法來做到這一點?
我首先要說的是:保持一致。
我認為您幾乎已經完成了您在問題中概述的約定。 不過有幾點意見:
我認為第 1 點和第 2 點很好。
第 3 點 - 遺憾的是,這並不總是可能的。 想想您將如何處理具有列foo_id
和another_foo_id
的單個表foo_bar
,這兩個列都引用了foo
表foo_id
列。 您可能需要考慮如何處理此問題。 不過,這有點極端!
第 4 點 - 與第 3 點類似。您可能希望在外鍵名稱的末尾引入一個數字,以適應具有多個引用列的情況。
第 5 點 - 我會避免這種情況。 當您想在以后從表中添加或刪除列時,它為您提供的幫助很少,並且會變得很頭疼。
其他一些要點是:
索引命名約定
您可能希望為索引引入命名約定——這對您可能想要執行的任何數據庫元數據工作都有很大幫助。 例如,您可能只想調用索引foo_bar_idx1
或foo_idx1
- 完全取決於您,但值得考慮。
單數與復數列名
解決列名和表名中復數與單數的棘手問題可能是個好主意。 這個主題經常在 DB 社區引起大討論。 對於表名和列,我會堅持使用單數形式。 那里。 我說過了。
這里最重要的當然是一致性!
一致性是任何命名標准的關鍵。 只要它是合乎邏輯的和一致的,你就成功了 99%。
標准本身在很大程度上是個人喜好 - 所以如果你喜歡你的標准,那就用它吧。
直接回答你的問題 - 不,MySQL 沒有首選的命名約定/標准,所以滾動你自己的就好了(你的似乎合乎邏輯)。
MySQL對其或多或少嚴格的規則有一個簡短的描述:
https://dev.mysql.com/doc/internals/en/coding-style.html
Simon Holywell 最常見的 MySQL 編碼風格:
另請參閱此問題: 是否有任何已發布的 SQL 編碼風格指南?
值得慶幸的是,PHP 開發人員不像我所知道的某些開發社區那樣是“駱駝案例偏執狂”。
你的約定聽起來不錯。
只要它們 a) 簡單,並且 b) 一致 - 我看不出任何問題:)
PS:就個人而言,我認為 5) 是矯枉過正...
簡單回答:否
好吧,至少是 Oracle 或社區鼓勵的命名約定,不,但是,基本上您必須注意遵循標識符的規則和限制,例如 MySQL 文檔中所示: https : //dev.mysql.com /doc/refman/8.0/en/identifiers.html
關於您遵循的命名約定,我認為可以,只是數字 5 有點不必要,我認為大多數用於管理數據庫的可視化工具都提供了對列名進行排序的選項(我使用 DBeaver,它有),所以如果目的是對你的桌子有一個很好的視覺呈現,你可以使用我提到的這個選項。
根據個人經驗,我會推薦這個:
lower_case_table_names
配置不正確,您的服務器開始拋出錯誤,只是因為無法識別您的駝峰命名法或 PascalCase 標准(區分大小寫問題)。那么“復數 vs 單數”命名呢? 嗯,這多半是個人喜好的情況。 就我而言,我嘗試對表格使用復數名稱,因為我認為表格是元素的集合或包含元素的包,因此復數名稱對我來說很有意義; 以及列的單數名稱,因為我將列視為對這些表元素進行單數描述的屬性。
一致性是每個人都強烈建議的,其余的取決於你,只要它有效。
對於初學者來說,它很容易忘乎所以,我們當時可以命名任何我們想要的名字。 這在當時是有道理的,但稍后會令人頭疼。
foo
foobar
或foo_bar
很棒。 我們盡可能直截了當地命名我們的表格,如果它們是兩個不同的詞,則僅使用下划線。 studentregistration
到student_registration
就像@Zbyszek 所說的那樣,擁有一個簡單的id
就足以實現自動增量。 越簡單越好。 為什么需要foo_id
? 我們很早就遇到了同樣的問題,我們用表前綴命名所有列。 像foo_id
, foo_name
, foo_age
。 我們現在去掉了表名,只保留盡可能短的 col。
由於我們只使用 PK 的 id,我們將使用foo_bar_fk
(表名是唯一的,后面是唯一的 PK,然后是_fk
)作為外鍵。 我們不將id
添加到 col 名稱,因為據說名稱 'id' 始終是給定表的 PK。 所以我們只有表名和_fk
最后。
對於約束,我們刪除所有下划線並使用駝峰命名法 (tablename + Colname + Fk) foobarUsernameFk
(用於 username_fk col)加入。 這只是我們遵循的一種方式。 我們為每個名稱結構保留一個文檔。
在保持 col 名稱簡短時,我們還應該注意 RESTRICTED 名稱。
+------------------------------------+
| foobar |
+------------------------------------+
| id (PK for the current table) |
| username_fk (PK of username table) |
| location (other column) |
| tel (other column) |
+------------------------------------+
正如@fabrizio-valencia 所說,使用小寫。 在 Windows 中,如果您導出 mysql 數據庫 (phpmyadmin),表名稱將轉換為小寫,這會導致各種問題。 請參閱MySQL 中的表名是否區分大小寫?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.