簡體   English   中英

MySQL 是否有命名約定?

[英]Is there a naming convention for MySQL?

這是我的方法:

  1. 表名是小寫的,使用下划線分隔單詞,並且是單數(例如foofoo_bar等。
  2. 我通常(並非總是)有一個自動增量 PK。 我使用以下約定: tablename_id (例如foo_idfoo_bar_id等)。
  3. 當一個表包含一個作為外鍵的列時,我只是從它來自的任何表中復制該鍵的列名。 例如,假設表foo_bar具有 FK foo_id (其中foo_idfoo的PK)。
  4. 在定義 FK 以強制參照完整性時,我使用以下內容: tablename_fk_columnname (例如進一步示例 3,它將是foo_bar_foo_id )。 由於這是一個表名/列名組合,它保證在數據庫中是唯一的。
  5. 我對列進行排序:PK、FK,然后按字母順序排列其余列

有沒有更好、更標准的方法來做到這一點?

我首先要說的是:保持一致。

我認為您幾乎已經完成了您在問題中概述的約定。 不過有幾點意見:

我認為第 1 點和第 2 點很好。

第 3 點 - 遺憾的是,這並不總是可能的。 想想您將如何處理具有列foo_idanother_foo_id的單個表foo_bar ,這兩個列都引用了foofoo_id列。 您可能需要考慮如何處理此問題。 不過,這有點極端!

第 4 點 - 與第 3 點類似。您可能希望在外鍵名稱的末尾引入一個數字,以適應具有多個引用列的情況。

第 5 點 - 我會避免這種情況。 當您想在以后從表中添加或刪除列時,它為您提供的幫助很少,並且會變得很頭疼。

其他一些要點是:

索引命名約定

您可能希望為索引引入命名約定——這對您可能想要執行的任何數據庫元數據工作都有很大幫助。 例如,您可能只想調用索引foo_bar_idx1foo_idx1 - 完全取決於您,但值得考慮。

單數與復數列名

解決列名和表名中復數與單數的棘手問題可能是個好主意。 這個主題經常在 DB 社區引起大討論 對於表名和列,我會堅持使用單數形式。 那里。 我說過了。

這里最重要的當然是一致性!

一致性是任何命名標准的關鍵。 只要它是合乎邏輯的和一致的,你就成功了 99%。

標准本身在很大程度上是個人喜好 - 所以如果你喜歡你的標准,那就用它吧。

直接回答你的問題 - 不,MySQL 沒有首選的命名約定/標准,所以滾動你自己的就好了(你的似乎合乎邏輯)。

MySQL對其或多或少嚴格的規則有一個簡短的描述:

https://dev.mysql.com/doc/internals/en/coding-style.html

Simon Holywell 最常見的 MySQL 編碼風格:

http://www.sqlstyle.guide/

另請參閱此問題: 是否有任何已發布的 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 標准(區分大小寫問題)。
  • 簡稱 簡單明了。 最簡單快捷的是識別您的表或列,效果更好。 相信我,當您在短時間內進行大量不同的查詢時,最好讓所有內容都易於編寫(和閱讀)。
  • 避免前綴 除非您對不同應用程序的表使用相同的數據庫,否則不要使用前綴。 這只會為您的查詢增加更多的冗長。 在某些情況下這可能很有用,例如,當您想要標識主鍵和外鍵時,通常表名用作 id 列的前綴。
  • 使用下划線分隔單詞 如果您仍然想使用多個單詞來命名表、列等,那么請使用下划線來分隔_the_words,這有助於提高可讀性(您的眼睛和緊張的大腦會感謝您)。
  • 保持一致 一旦你有了自己的標准,就去遵循它。 不要成為制定規則的人,而不是第一個打破規則的人,這是可恥的。

那么“復數 vs 單數”命名呢? 嗯,這多半是個人喜好的情況。 就我而言,我嘗試對表格使用復數名稱,因為我認為表格是元素的集合或包含元素的包,因此復數名稱對我來說很有意義; 以及列的單數名稱,因為我將列視為對這些表元素進行單數描述的屬性。

一致性是每個人都強烈建議的,其余的取決於你,只要它有效。

對於初學者來說,它很容易忘乎所以,我們當時可以命名任何我們想要的名字。 這在當時是有道理的,但稍后會令人頭疼。

foo foobarfoo_bar很棒。 我們盡可能直截了當地命名我們的表格,如果它們是兩個不同的詞,則僅使用下划線。 studentregistrationstudent_registration

就像@Zbyszek 所說的那樣,擁有一個簡單的id就足以實現自動增量。 越簡單越好。 為什么需要foo_id 我們很早就遇到了同樣的問題,我們用表前綴命名所有列。 foo_idfoo_namefoo_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM