>[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='配置表'
```
- 序言
- 图片预览
- 诠释高效开发
- 提问的智慧
- GIT命令参考
- 安装composer
- 断点调试技巧
- 调试环境的搭建
- 调试工具的使用及技巧
- 前置基础-TP底层讲解
- 理解编程的抽象
- 耦合与解耦
- 自动加载
- 反射类
- 控制反转(IOC)和依赖注入(DI)
- iThink 自定义依赖注入的实现
- 常用设计模式
- SPL标准库
- 行为-钩子-插件
- AOP-面向切面
- RBAC和Auth类的本质
- 安装iThink
- 环境要求
- 代码下载与环境配置
- 执行安装
- 体验测试模块
- apache配置
- nginx配置
- 系统架构详解
- 目录详解
- 执行流程图
- 数据字典
- RBAC 权限管理架构
- 系统分层详解
- 控制器层(controller)
- 逻辑层(logic)
- 视图层(view)
- 模型层(model)
- 服务层(service)
- 应用包架构详解
- 目录结构
- 开发规范
- 数据库规范
- 编码规范
- 功能设计原则与规范
- 后台功能详解
- 基础功能
- RBAC + Auth 权限机制
- 应用化功能机制
- 代码生成器(重要)
- 应用骨架代码生成
- 数据表 CURD 代码生成
- 页面构造器(重要)
- 通用元素构造器
- 表格元素构造器
- 搜索表单元素构造器
- 表单元素构造
- 闭包事物构造器
- 应用的开发
- 函数参考