MySQL 編碼標準和命名約定

MySQL 命名約定

引擎和字符集

引擎始終是MyISAM,除非在特殊情況下需要不同。所有數據庫都必須使用 UTF8 字符集。

數據庫

數據庫名稱必須與項目名稱同名。如果項目名稱爲“我的網站”,則應將數據庫創建爲:

CREATE DATABASE mywebsite DEFAULT CHARSET UTF8;

所有表都必須採用 UTF8 編碼。同一包中的所有表都必須具有前綴。使用 2 個或 3 個字母來描述要爲數據庫添加前綴的包。如果項目名稱是Real Deal Marketing,最明顯的前綴將是“rdm_”;

CREATE TABLE rdm_affiliates;

更改表和文件版本 major.minor[.build[.revision]]

所有表的所有更改都應保存在(database_name).sql文件中。如果數據庫名稱爲“realdealmarketing”文件名應爲 realdealmarketing-1.0.0.sql

  1. 初始文件必須爲版本 1.0.0
  2. 如果只有表更改文件,則新版本應增加 0.0.1 示例:realdealmarketing-1.0.7.sql
  3. 如果創建新表,則必須將版本增加 0.1。示例:房地產交易營銷-1.2.0.sql
  4. 如果刪除表,則必須將版本提高 1.0。示例:realdealmarketing-2.0.0.sql
  5. 所有次要修訂版都應具有遵循以下模式的適當文件名和版本:major.minor[.build[.revision]]
  6. 所有版本應保存在同一目錄中

領域

本節說明如何創建數據庫表字段以及如何爲每個字段選擇名稱。

字段名稱

字段名稱必須以表名的 2-4 個字母爲前綴。
字段名稱始終以小寫形式,用“_”分隔單詞

DROP TABLE IF EXISTS rdm_affiliates;
CREATE TABLE IF NOT EXISTS rdm_affiliates
(
  aff_id 		INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  aff_url 		VARCHAR(120) NOT NULL DEFAULT '',
  aff_title 		VARCHAR(120) NOT NULL DEFAULT '',
  aff_website 	CHAR(10) NOT NULL DEFAULT '',
  aff_gender 		CHAR(8) NOT NULL DEFAULT '',
  aff_landing_page	VARCHAR(120) NOT NULL DEFAULT '',
  aff_link 		VARCHAR(120) NOT NULL DEFAULT '',
  aff_text 		TEXT,

  PRIMARY KEY (aff_id),
  INDEX (aff_website)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

所有字段名稱都必須是描述性的,避免使用“唯一”、“排序”和保留字等名稱。

空值和默認值

除AUTO_INCREAMENT、文本、日期(和類似字段)外的所有字段都必須定義爲非空默認“值”

例子:

aff_title 		VARCHAR(120) NOT NULL DEFAULT ''
aff_gender 		ENUM('male','female') NOT NULL DEFAULT 'male'
user_id 		INT UNSIGNED NOT NULL DEFAULT 0
user_birthday		DATE DEFAULT NULL
user_allow_newsletter	TINYINT(1) UNSIGNED NOT NULL DEFAULT 0
art_text		TEXT

指標

WHERE 和 ORDER BY 中的所有字段都應定義爲 INDEX。如果您有這樣的疑問:

SELECT * FROM table1 WHERE a='something' ORDER BY b

然後應將字段 a、b 視爲索引

INDEX index_name (a,b)

查爾特指數

如果文本字段(CHAR、VARCHAR)用作較大表(> 5000 條記錄)的索引,則應始終定義爲 CHAR。例如,如果您有如下字段:

aff_url VARCHAR(255) NOT NULL DEFAULT ''
...
INDEX afiliate_url (aff_url)

爲了提高性能,應將此表更改爲如下所示

aff_url CHAR(20) NOT NULL DEFAULT ''
...
INDEX afiliate_url (aff_url)

查詢

保留字應爲大寫以提高可讀性。此外,嘗試在多行中分隔長查詢,而簡單查詢應保留在一行中。例:

SELECT a.field_name1, a.field_name2, COUNT(a.field3) AS cnt, b.*
FROM table1 AS a
LEFT JOIN table2 AS b ON (a.key_field = b.key_field)
RIGHT JOIN table3 AS c ON (a.key_field2 = c.key_field2)
WHERE a.field7 = 'something here' AND b.field9 = '45'
GROUP BY a.field_name1
ORDER BY a.field_name2 DESC, b.field8
HAVING cnt > 5

始終在 WHERE 中轉義值,即使值爲整數

查詢中的 PHP 變量

PHP 變量必須在查詢之前定義並轉義。

避免:

\(q = "SELECT * FROM users WHERE email='"._escape(\)_POST['email'])."' ";

用:

\(email = _escape(\)_POST['email']);
if (empty(\(email)) { return false; } \)q = "SELECT * FROM users WHERE email='{$email}' ";

附錄

PHPMyAdmin

儘量避免使用 PHP 我的管理員創建表,因爲它存在默認值問題。它是瀏覽和簡單數據庫操作的絕佳產品,但它會讓您懶惰,並且您通常會忘記保留表更改和其他更改的歷史記錄。

參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章