>[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-女,三種可能,無論怎么查,查出來的結果都沒有太高的區分度
* 建立組合索引,必須把區分度高的字段放在前面
*****
**建表參考**

*****

```
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 代碼生成
- 頁面構造器(重要)
- 通用元素構造器
- 表格元素構造器
- 搜索表單元素構造器
- 表單元素構造
- 閉包事物構造器
- 應用的開發
- 函數參考