背景:A4 需要字典三层合并、配置版本与命名规则的共享契约。\n改动:新增 dict/config 契约、system-configs 定义与校验、命名模板解析;新增 dict_types/dict_items/system_config_versions 迁移与 13 类/96 条字典、26 项配置种子。\n影响面:shared 新增导出;prisma 新增表与迁移;客户基础字段 DTO 硬上界调整为 50(实际生效上限仍由配置动态校验)。\n回滚:回滚本提交并保留新增表(不删数据)。\n验证:shared typecheck/test 147;seed 幂等;prisma migrate dev 已应用。
91 lines
3.5 KiB
SQL
91 lines
3.5 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "DictStatus" AS ENUM ('ACTIVE', 'DISABLED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "DictKind" AS ENUM ('TREE', 'LIST');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "system_config_versions" (
|
|
"id" CHAR(26) NOT NULL,
|
|
"config_key" VARCHAR(128) NOT NULL,
|
|
"version" INTEGER NOT NULL,
|
|
"old_value" JSONB,
|
|
"new_value" JSONB NOT NULL,
|
|
"reason" VARCHAR(255),
|
|
"changed_by" CHAR(26),
|
|
"changed_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "system_config_versions_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "dict_types" (
|
|
"id" CHAR(26) NOT NULL,
|
|
"code" VARCHAR(64) NOT NULL,
|
|
"name" VARCHAR(64) NOT NULL,
|
|
"group_key" VARCHAR(32) NOT NULL,
|
|
"kind" "DictKind" NOT NULL DEFAULT 'LIST',
|
|
"description" VARCHAR(255) NOT NULL DEFAULT '',
|
|
"industry_scoped" BOOLEAN NOT NULL DEFAULT false,
|
|
"builtin" BOOLEAN NOT NULL DEFAULT false,
|
|
"status" "DictStatus" NOT NULL DEFAULT 'ACTIVE',
|
|
"sort_order" INTEGER NOT NULL DEFAULT 0,
|
|
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMPTZ(3) NOT NULL,
|
|
"updated_by" VARCHAR(64),
|
|
|
|
CONSTRAINT "dict_types_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "dict_items" (
|
|
"id" CHAR(26) NOT NULL,
|
|
"type_id" CHAR(26) NOT NULL,
|
|
"code" VARCHAR(64) NOT NULL,
|
|
"name" VARCHAR(64) NOT NULL,
|
|
"parent_code" VARCHAR(64),
|
|
"industry_id" CHAR(26),
|
|
"sort_order" INTEGER NOT NULL DEFAULT 0,
|
|
"status" "DictStatus" NOT NULL DEFAULT 'ACTIVE',
|
|
"remark" VARCHAR(255) NOT NULL DEFAULT '',
|
|
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMPTZ(3) NOT NULL,
|
|
"updated_by" VARCHAR(64),
|
|
|
|
CONSTRAINT "dict_items_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "system_config_versions_changed_at_idx" ON "system_config_versions"("changed_at");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "system_config_versions_config_key_version_key" ON "system_config_versions"("config_key", "version");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "dict_types_code_key" ON "dict_types"("code");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "dict_types_group_key_sort_order_idx" ON "dict_types"("group_key", "sort_order");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "dict_items_type_id_industry_id_sort_order_idx" ON "dict_items"("type_id", "industry_id", "sort_order");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "dict_items_type_id_parent_code_idx" ON "dict_items"("type_id", "parent_code");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "system_config_versions" ADD CONSTRAINT "system_config_versions_config_key_fkey" FOREIGN KEY ("config_key") REFERENCES "system_configs"("config_key") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "dict_items" ADD CONSTRAINT "dict_items_type_id_fkey" FOREIGN KEY ("type_id") REFERENCES "dict_types"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "dict_items" ADD CONSTRAINT "dict_items_industry_id_fkey" FOREIGN KEY ("industry_id") REFERENCES "industries"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- A4 / R-10:同 type + code + 行业层唯一;industry_id 为 NULL 的通用层也必须唯一
|
|
CREATE UNIQUE INDEX "dict_items_type_code_generic_key" ON "dict_items"("type_id", "code") WHERE "industry_id" IS NULL;
|
|
CREATE UNIQUE INDEX "dict_items_type_code_industry_key" ON "dict_items"("type_id", "code", "industry_id") WHERE "industry_id" IS NOT NULL;
|
|
|
|
-- 一条条目不能把自己作为父级
|
|
ALTER TABLE "dict_items" ADD CONSTRAINT "dict_items_no_self_parent_check" CHECK ("parent_code" IS NULL OR "parent_code" <> "code");
|