🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[success] > **推荐使用 sqlyog 或者 Navicat 管理 mysql** > **强烈不建议使用 phpMyAdmin, 速度太慢,修改十分麻烦,笔者使用的 sqlyog** ***** >[danger] > **简单的说就是每个需要写 CURD 操作的表都必须有以下几个字段** > **否则会导致回收站功能不能使用** > **甚至基础功能出现bug** > **关系映射表不需要加,比如 ithinkphp_role_privilege , ithinkphp_user_role , ithinkphp_config_group 这样的表** ``` CREATE TABLE `table_name` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `remark` text NOT NULL COMMENT '备注', `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '0:禁用, 1:正常, 2:已删除', `time` int(11) NOT NULL DEFAULT '0' COMMENT '添加时间', `del_time` int(11) NOT NULL DEFAULT '0' COMMENT '删除时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB COMMENT='表注释' ``` **表设计规范** * 所有的表必须要加前缀,统一使用 `ithink_ `,不能修改 * 自己开发的应用,表名加上自己应用前缀,如 `ithink_blog_ ` * 所有表和字段必须添加注释 * 所有的表名和字段名小写,多关键字使用下划线分割(关键字尽量全称,不用顾虑表名太长) * 数据类型尽量用数字类型,数字类型的比字符类型的要快 * 所有枚举数据都使用整形保存,通常使用tinyint,根据情况选择更长的类型,如性别,0-保密,1-男,2-女 * 若非逻辑需求则整形字段都使用无符号整形 * 必须使用InnoDB存储引擎,所有表的CURD操作都已经封装在了事务里,myisam将无法工作 * 布尔类型的字段名的值均以 is_、has_、exist_ 或者 can_开头,如is_new * 必须使用UTF8mb4字符集 * 必须使用UTF8mb4_general_ci校对 * 所有时间都统一保存时间戳,类型使用int型 **字段约定** * 所有表主键自增列都使用id作为字段名称 * 必须把字段定义为NOT NULL(非空)并且提供默认值,text类型不需要有默认值 * 所有表用`user_id`代表用户id字段 * 涉及无限极分类的表父级id字段名统一为 `pid ` * 表中的`status`字段为数据状态,不要与业务逻辑混合,如支付状态可新增 `pay_status` 字段记录 * 所有实体表统一加`status(tinyint)`字段,0-回收站,1-正常状态,2-禁用状态 * 所有实体表统一加`time(int)`字段,表示添加记录的时间 * 所有实体表统一加`del_time(int)`字段,表示软删除记录的时间 * 所有实体表统一加`remark(text)`字段,表示备注,入表都用`stripslashes`,`htmlentities`,`htmlspecialchars` 三个函数处理过,取出时都反向处理过(已经集成在系统,开发者无需处理) **其他规范** * 单索引字段数不允许超过5个 * 禁止在更新十分频繁、区分度不高的属性上建立索引 如性别,一共就0-保密,1-男,2-女,三种可能,无论怎么查,查出来的结果都没有太高的区分度 * 建立组合索引,必须把区分度高的字段放在前面 ***** **建表参考** ![](https://box.kancloud.cn/eceb1d7b3b4d8d9ed2c0d448076e43f1_1236x698.png) ***** ![](https://box.kancloud.cn/82361c436eb3c15c05bfd64fbd120a48_970x875.png) ``` CREATE TABLE `ithink_user` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户名', `password` char(32) CHARACTER SET utf8mb4 NOT NULL DEFAULT '' COMMENT '登录密码', `salt` char(6) CHARACTER SET utf8mb4 NOT NULL DEFAULT '' COMMENT '盐', `gender` tinyint(2) NOT NULL DEFAULT '0' COMMENT '性别;0:保密,1:男,2:女', `phone` char(11) CHARACTER SET utf8mb4 NOT NULL DEFAULT '' COMMENT '用户手机号', `email` varchar(255) CHARACTER SET utf8mb4 NOT NULL DEFAULT '' COMMENT '登录邮箱', `birthday` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '生日', `nickname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户昵称', `score` int(11) NOT NULL DEFAULT '0' COMMENT '用户积分', `reg_ip` char(16) CHARACTER SET utf8mb4 NOT NULL DEFAULT '' COMMENT '注册ip', `last_login_ip` char(16) CHARACTER SET utf8mb4 NOT NULL DEFAULT '' COMMENT '最后登录ip', `last_online_time` int(11) NOT NULL DEFAULT '0' COMMENT '最后在线时间', `last_login_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最后登陆时间', `user_url` varchar(255) CHARACTER SET utf8mb4 NOT NULL DEFAULT '' COMMENT '用户个人网址', `user_type` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '用户类型;1:后台, 2:前台用户', `profile_pic` varchar(255) CHARACTER SET utf8mb4 NOT NULL DEFAULT '' COMMENT '用户头像路径', `signature` varchar(255) CHARACTER SET utf8mb4 NOT NULL DEFAULT '' COMMENT '个性签名', `login_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '登陆次数', `status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '0:禁用, 1:正常, 2:已删除', `del_time` int(11) NOT NULL DEFAULT '0' COMMENT '删除时间', `time` int(10) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `user_login_key` (`user`), KEY `user_nicename` (`nickname`) ) ENGINE=InnoDB COMMENT='用户表' ``` ``` CREATE TABLE `ithink_config` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL DEFAULT '' COMMENT '配置名字', `key` varchar(255) NOT NULL DEFAULT '' COMMENT '配置键,config函数用的键', `value` text NOT NULL COMMENT '对应值', `type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '1:array 2:textarea 3:switch', `group_id` tinyint(4) NOT NULL DEFAULT '1' COMMENT '所属分组', `is_const` tinyint(4) NOT NULL COMMENT '是否常量 0不是,1是', `remark` text NOT NULL COMMENT '备注', `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '0:禁用, 1:正常, 2:已删除', `time` int(11) NOT NULL DEFAULT '0' COMMENT '添加时间', `del_time` int(11) NOT NULL DEFAULT '0' COMMENT '删除时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB COMMENT='配置表' ```