Mysql:关于命名
1. 用双引号包裹的情况下,命名时不允许使用空白字符、反引号,其它字符均可
2. 无双引号包裹的情况下,命名时仅允许使用:$、_、数字、大小写字母、中文字符(已知win系统支持),但不允许以数字开头
3. 库名、表名、列名仅在win系统下默认不区分大小写,可通过"charset=utf8_bin"设置后区分
【规范】
1. 仅使用小写字母、下划线、数字
2. 最大63个字符
3. 库名与表名不能相同,表名与内部列名不能相同
4. 不建议用 保留字 作为表名:
如果写SQL语句时使用保持用反引号包裹的规范,可忽略此项
否则建议命名时至少存在一个下划线作为间隔(完全避免与所有关键字重复),且前缀表示作用分类,后缀表示具体类型。如:临时表(tmp_xxx)
5. 命名必须见名知意
6. 外键关联的列名,建议以"表名_id"命名
7. 【高级】获取外键表的数据时,在书写SQL语句时,对于外键表的列名建议重命名(AS)为"[自定义前缀]外键表_外键表的字段名",其中[自定义前缀]部分可省略。如:
aa表的bb_id字段,关联bb表的id字段,查询bb表的name字段,可写为:SELECT `bb`.`name` AS `bb_name` FROM `aa` JOIN `bb` ON `bb`.`id`=`aa`.`bb_id`
优点说明:可以在联合查询时,可由后端程序便捷生成查询列名,避免重复,且可见名知意
8. 建议均为每个表设置:
主键:UUID安全性比自增ID更高,以"id"或"表名_id"命名
唯一键:除了设置TOKEN数据外均不建议NULL;特殊情况可由同行的关键几列数据进行组合或转化后生成,步骤由后端程序控制
创建时间:create_time 或 ctime
更新时间:update_time 或 utime
若需要用户或管理员,则再为每个表设置:
创建者id:create_user_id 或 cuser_id
更新者id:update_user_id 或 uuser_id
8. 若需要将A表的部分数据迁移到B表,则建议两表在迁移时各自对应的列名必须相同。如:将"购物车表"数据(goods_id、goods_count) 迁移到 "已完成订单表"数据(goods_id、goods_count)
9. 若存在多表的小整数字段,各个数值代表不同含义,可专门设立一个数据表进行存储,其中
建议字段:主键、唯一键(由表名+列名+数值组合而成)、所在表名、所在列名、对应数值、数值含义、是否禁用(可选)
优点:便于对小整数字段管理,不用找到对应的表结构再对相关字段设置长段注释
查询语句示例:SELECT `对应数值`,`数值含义` FROM `此表名` WHERE `所在表名`=? AND `所在列名`=? AND `是否禁用`=?'