数据库与CRUD生成
XYGo Admin 2026-04-22 1 次阅读
建表规范、SQL幂等写法、CRUD生成器扩展目标
表命名
所有扩展数据表必须以 xy_{扩展名}_ 为前缀:
xy_shop_order ✓ 正确
xy_shop_product ✓ 正确
xy_order ✗ 错误(缺少扩展名前缀)
shop_order ✗ 错误(缺少 xy_ 前缀)
安装 SQL
install/pgsql.sql 和 install/mysql.sql 在全新安装时执行,建议使用幂等写法:
sql
-- PostgreSQL
CREATE TABLE IF NOT EXISTS xy_shop_order (
id bigserial PRIMARY KEY,
order_no varchar(64) NOT NULL DEFAULT '',
status smallint NOT NULL DEFAULT 1,
amount decimal(10,2) NOT NULL DEFAULT 0,
created_at bigint NOT NULL DEFAULT 0,
updated_at bigint NOT NULL DEFAULT 0,
deleted_at bigint NOT NULL DEFAULT 0
);
CREATE INDEX IF NOT EXISTS idx_shop_order_status ON xy_shop_order(status);
CREATE INDEX IF NOT EXISTS idx_shop_order_deleted_at ON xy_shop_order(deleted_at);
升级 SQL
upgrade/pgsql.sql 在版本升级时执行。必须使用幂等写法:
sql
-- 新增字段
ALTER TABLE xy_shop_order ADD COLUMN IF NOT EXISTS remark varchar(500) DEFAULT '';
-- 新增索引
CREATE INDEX IF NOT EXISTS idx_shop_order_created_at ON xy_shop_order(created_at);
-- 新增表
CREATE TABLE IF NOT EXISTS xy_shop_refund (
id bigserial PRIMARY KEY,
order_id bigint NOT NULL DEFAULT 0,
reason varchar(500) NOT NULL DEFAULT ''
);
-- 新增配置(不覆盖已有值)
INSERT INTO xy_sys_config ("group", "key", "value")
VALUES ('shop', 'payment_timeout', '1800')
ON CONFLICT ("group", "key") DO NOTHING;
卸载 SQL
uninstall/pgsql.sql 在卸载时执行,菜单由安装器自动清理,无需手写:
sql
DROP TABLE IF EXISTS xy_shop_order;
DROP TABLE IF EXISTS xy_shop_refund;
CRUD 代码生成器
系统内置的代码生成器支持直接生成代码到扩展目录:
- 进入后台 → 开发工具 → 代码生成
- 选择数据表后进入第二步"基础配置"
- 在"生成目标"下拉中选择已安装的扩展
- 所有路径自动切换为扩展目录
- 生成的代码直接放入
server/addons/{name}/和web/src/addons/{name}/