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 我的管理员创建表,因为它存在默认值问题。它是浏览和简单数据库操作的绝佳产品,但它会让您懒惰,并且您通常会忘记保留表更改和其他更改的历史记录。

参考资料

posted @ 2023-02-12 16:48  guangzan  阅读(111)  评论(0编辑  收藏  举报