## 表和字段命名
表和字段的命名以`PHP`编码中的命名规范为基本准则。
所有数据表名称,一律使用单数的形式,比如:命令为 `user` 而不是 `users`
当几个表间的字段有关连时,要注意表与表之间关联字段命名的统一,如 `ims_rule_keywords` 表中的 `rid` 与 `ims_rule` 表中的`rid`。
## 主键
每个表必须包含一个名称为 `id` 的自增主键。
## 字段结构
基于效率的考虑,所有字段均不能为空,即全部`NOT NULL`,可以设置默认值来代替。
预计不会存储非负数的字段,例如各项id、统计数等,必须设置为`UNSIGNED`类型。`UNSIGNED`类型比`非UNSIGNED`类型所能存储的正整数范围大一倍,因此能获得更大的数值存储空间。
储开关、选项数据的字段,通常使用`tinyint(1)`非UNSIGNED类型,少数情况也可能使用`enum()`结果集的方式。`tinyint`作为开关字段时,通常`1为打开;0为关闭;-1为特殊数据,例如N/A(不可用),高于1的为特殊结果或开关二进制数组合`。
任何类型的数据表,字段空间应当本着足够用,不浪费的原则。MEMORY/HEAP类型的表中,尤其要注意规划节约使用存储空间,这将节约更多内存。
## SQL语句
所有`SQL`语句中,除了表名、字段名称以外,全部语句和函数均需大写,应当杜绝小写方式或大小写混杂的写法。例如`SELECT * FROM ims_members`;
很长的`SQL`语句应当有适当的断行,依据`JOIN、FROM、ORDER BY`等关键字进行界定。
通常情况下,在对多表进行操作时,要根据不同表名称,对每个表指定一个`1~2`个字母的缩写,以利于语句简洁和可读性。
## 运算与检索
数值运算一般比字符串运算更快。例如比较运算,可在单一运算中对数进行比较。而串运算涉及几个逐字节的比较,如果串更长的话,这种比较还要多。
如果串列的值数目有限,应该利用`普通整型`或`emum类型`来获得数值运算的优越性。
更小的字段类型永远比更大的字段类型处理要快得多。对于字符串,其处理时间与串长度直接相关。一般情况下,较小的表处理更快。对于定长表,应该选择最小的类型,只要能存储所需范围的值即可。例如,如果`mediumint`够用,就不要选择`bigint`。对于可变长类型,也仍然能够节省空间。一个`TEXT` 类型的值用2 字节记录值的长度,而一个`LONGTEXT` 则用4字节记录其值的长度。如果存储的值长度永远不会超过64KB,使用TEXT 将使每个值节省2字节。
## 性能优化
主要分为:`表结构优化`,`索引优化`,`查询优化`。取决于开发人员经验和个人能力。不详述。