数据库

优质
小牛编辑
133浏览
2023-12-01

很多时候我们的插件都需要使用到数据库,此篇幅为你解答如何在插件中使用数据库功能。

设计规范

我们在设计插件数据库时最好统一设计规范,因为更好的设计规范能更好的让我们的用户更快速的掌握我们开发者的设计思想。

  1. 表名和字段名全小写,只允许出现a-z_这几种字符,且不能有拼音,只能为英文单词
  2. 存储引擎统一使用innodb引擎
  3. 字符集统一使用utf8mb4_general_ci
  4. 关联字段统一使用_id结尾,如user_id,task_id(任务表名为task),item_id(物品表名为item), 当为father_id,parent_id,pid,prev_id等字段时表示和当前表主键进行关联,当为task_ids,user_ids时表示一个集合,以半角逗号进行分隔(非JSON)
  5. 时间统一使用Unix时间戳格式, 秒级, 整型, 长度10,且必须以time结尾, 如createtime, updatetime, paytime,expiretime
  6. 时长统一使用秒格式, 整型, 长度10,且必须以seconds结尾,如onlineseconds,todayonlineseconds
  7. 表主键必须为id,主索引
  8. 表名和字段名统一使用英文名称,不允许出现中英混搭的情况出现
  9. 日志表统一为模块名加上_log进行命名
  10. 字段内容为json数据时,以data进行结尾,比如itemdata, rewarddata
  11. 当字段为某操作数量时,以nums结尾,比如 buynums,salenums
  12. 当一表出现两个或两个以上会员ID时,user_id表示自己, receiver_user_id表示他人,多人时使用receiver_user_ids,以半角逗号进行分隔(非JSON)
  13. 当出现可数名词字段时,一定要加上字符s,如comments,views

数据表名规范

插件数据表名必须以插件标识开始,例如:

fa_mydemo_log
fa_mydemo_item
fa_mydemo_comment

其中mydemo为你的插件标识,fa_为数据表前缀。

特殊字段

建议开发者在设计数据库时保留以下字段的设计名称,这样我们能更好的统一不同插件之间的命名规范。

字段字段名称字段类型字段说明
category_id分类IDint关联fa_category表,后台CRUD时会自动生成selectpage组件
user_id会员IDint关联fa_user表,后台CRUD时会自动生成selectpage组件
weigh权重int后台的排序字段,如果存在该字段将出现排序按钮,可上下拖动进行排序
createtime创建时间int记录添加时间字段,不需要手动维护
updatetime更新时间int记录更新时间的字段,不需要手动维护
deletetime删除时间int记录删除时间的字段,不需要手动维护,如果存在此字段将会生成回收站功能,字段默认值务必为null
status状态字段enum状态标识,如果存在此字段将启用TAB选项卡展示列表

安装脚本

每个插件都可以自带一个install.sql,用于在插件安装时,FastAdmin插件系统会自动执行此文件中的SQL,可用于创建数据库,写入相关数据等操作。以下为示例的SQL:

CREATE TABLE IF NOT EXISTS `__PREFIX__mydemo_list` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `pid` int(10) DEFAULT NULL COMMENT '父id',
  `title` varchar(100) DEFAULT NULL COMMENT '标题',
  `name` varchar(100) DEFAULT NULL COMMENT '名称',
  `createtime` int(10) DEFAULT NULL COMMENT '创建时间',
  `updatetime` int(10) DEFAULT NULL COMMENT '更新时间',
  `publishtime` int(10) DEFAULT NULL COMMENT '发布时间',
  `deletetime` int(10) DEFAULT NULL COMMENT '删除时间',
  `memo` varchar(100) DEFAULT '' COMMENT '备注',
  `status` enum('normal','hidden','rejected','pulloff') NOT NULL DEFAULT 'normal' COMMENT '状态',
  PRIMARY KEY (`id`),
  KEY `pid` (`pid`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='示例表';

__PREFIX__用于将在执行导入时自动替换为用户数据库配置的表前缀。

如果在版本升级时插件表结构需要变更,需要在install.sql追加变更的SQL语句,如

--
-- 1.0.1
-- 添加名称字段name
--
ALTER TABLE `__PREFIX__mydemo_list` ADD COLUMN `name` varchar(255) NULL DEFAULT '' COMMENT '名称' AFTER `title`;

同时注意上方的CREATE TABLE IF NOT EXISTS __PREFIX__mydemo_list语句中字段name的创建也需要存在。

温馨提示

  1. 尽量不要修改框架自带的表结构或其它插件的数据表结构。
  2. 安装脚本中不要包含DROP TABLE删除表的语句。
  3. 如果需要测试数据,请参考测试数据章节