-- P4a Task 5:用量阈值(单行配置表,迁移内种子行)+ 阈值告警账本(A23 后台侧)。 -- 校对手决:Prisma 生成 DDL 固定 utf8mb4_unicode_ci,逐表改写为库级约定的 -- utf8mb4_0900_bin(id/kind/albumId 等字符串列的大小写敏感语义依赖它)。 -- 「同 kind+albumId 活跃告警唯一」为应用级约束(MySQL 无部分唯一索引): -- evaluateUsage 以单行配置 FOR UPDATE 作串行化锚点(packages/db-cn/src/usage.ts)。 -- 阈值两维缺省 NULL=停用;种子行固定 id 见 USAGE_THRESHOLDS_SINGLETON_ID。 -- CreateTable CREATE TABLE `usage_thresholds` ( `id` VARCHAR(191) NOT NULL, `storageBytes` BIGINT NULL, `perAlbumBytes` BIGINT NULL, `updatedAt` DATETIME(6) NOT NULL, PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin; -- 单行种子(PUT /admin/usage/thresholds 恒 upsert 本行;缺失行由 evaluate -- 兜底视作双维停用,但迁移种子保证常规路径下不变量成立)。 INSERT INTO `usage_thresholds` (`id`, `storageBytes`, `perAlbumBytes`, `updatedAt`) VALUES ('usage-thresholds-single-row', NULL, NULL, CURRENT_TIMESTAMP(6)); -- CreateTable CREATE TABLE `usage_alerts` ( `id` VARCHAR(191) NOT NULL, `kind` VARCHAR(16) NOT NULL, `albumId` VARCHAR(64) NULL, `message` VARCHAR(1024) NOT NULL, `createdAt` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `resolvedAt` DATETIME(6) NULL, INDEX `usage_alerts_resolvedAt_idx`(`resolvedAt`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin;