feat: S0 主键改雪花(DDL 去 identity + 实体 ASSIGN_ID + 雪花配置)

为什么:自增主键把 ID 分配锁在单库序列上,分库分表时无法横向扩展。趁线上业务数据
近零(只有系统种子表有量)先改,代价最低。

- sql/schema.sql、sql/schema-phase1.sql、sql/partition-maintenance.sql:61 处
  GENERATED BY DEFAULT AS IDENTITY 去掉,主键改 BIGINT 无默认值
- 52 个实体 @TableId IdType.AUTO -> IdType.ASSIGN_ID;两个入口 id-type: assign_id,
  并加 global-config.sequence.worker-id/datacenter-id(单机固定值,多实例需按实例分配)
- 新增 sql/migrate-s0-snowflake.sql:存量库幂等迁移,走 DROP IDENTITY 保留数据,不重建表
- 实测:三份建表脚本在新库连跑两遍幂等;线上 57 张表 identity 归零;
  watch_history/playback_ticket/order_event 的主键与唯一索引仍含分区键
This commit is contained in:
Vicky committed 2026-10-16 09:00:38 +08:00
1 parent 6833e01e1f
commit 37c9a141d3
58 files changed
+174 -115

No files matched your search

+41 -41
View File
@@ -9,7 +9,7 @@
-- 具体的月分区由 sql/partition-maintenance.sql 创建(并把已存在的普通表转成分区表)。
--
-- 命名与类型约定(与 sql/schema.sql 保持一致):
-- BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY
-- BIGINT PRIMARY KEY(不设默认值;主键由应用侧雪花算法生成:MyBatis-Plus IdType.ASSIGN_ID)
-- 布尔语义用 SMALLINT(1/0),时间用 TIMESTAMP(3),默认 CURRENT_TIMESTAMP
-- 逻辑删除 deleted SMALLINT NOT NULL DEFAULT 0
-- updated_at 由 set_updated_at() 触发器维护
@@ -53,7 +53,7 @@ ALTER TABLE media_asset ADD COLUMN IF NOT EXISTS storage_type VARCHAR(16) NO
-- ============================================================
CREATE TABLE IF NOT EXISTS app_user (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
uid VARCHAR(32) NOT NULL, -- 对外展示的用户标识,避免暴露自增 ID
nickname VARCHAR(64) NOT NULL DEFAULT '',
avatar_url VARCHAR(512) NOT NULL DEFAULT '',
@@ -89,7 +89,7 @@ CREATE INDEX IF NOT EXISTS idx_app_user_created ON app_user (created_at DESC);
COMMENT ON TABLE app_user IS 'C 端用户';
CREATE TABLE IF NOT EXISTS app_user_credential (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
type VARCHAR(16) NOT NULL, -- PHONE/EMAIL/APPLE/GOOGLE
identifier VARCHAR(191) NOT NULL, -- E.164 手机号 / 邮箱 / 第三方唯一标识
@@ -108,7 +108,7 @@ CREATE INDEX IF NOT EXISTS idx_app_credential_user ON app_user_credential (user_
COMMENT ON TABLE app_user_credential IS 'C 端登录凭证(手机号/邮箱/第三方)';
CREATE TABLE IF NOT EXISTS app_user_session (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
refresh_token_hash VARCHAR(64) NOT NULL, -- SHA-256,不存明文
device_id VARCHAR(128) NOT NULL DEFAULT '',
@@ -130,7 +130,7 @@ CREATE INDEX IF NOT EXISTS idx_app_session_user ON app_user_session (user_id, re
COMMENT ON TABLE app_user_session IS 'C 端会话(可多设备)';
CREATE TABLE IF NOT EXISTS app_user_otp (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
scene VARCHAR(16) NOT NULL, -- REGISTER/LOGIN/RESET_PWD/BIND
target_type VARCHAR(16) NOT NULL, -- PHONE/EMAIL
target VARCHAR(191) NOT NULL,
@@ -150,7 +150,7 @@ CREATE INDEX IF NOT EXISTS idx_app_otp_ip ON app_user_otp (send_ip, created_at D
COMMENT ON TABLE app_user_otp IS '验证码发送与校验记录(同时用于反刷频控)';
CREATE TABLE IF NOT EXISTS app_user_consent (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
scene VARCHAR(32) NOT NULL, -- PRIVACY/TERMS/MARKETING/PERSONALIZED_AD
version VARCHAR(32) NOT NULL DEFAULT '',
@@ -165,7 +165,7 @@ CREATE INDEX IF NOT EXISTS idx_app_consent_user ON app_user_consent (user_id, sc
COMMENT ON TABLE app_user_consent IS '同意管理记录,商店审核与隐私合规要求可追溯';
CREATE TABLE IF NOT EXISTS app_user_device (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
device_id VARCHAR(128) NOT NULL,
platform VARCHAR(16) NOT NULL DEFAULT '',
@@ -181,7 +181,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS uk_app_device ON app_user_device (user_id, dev
COMMENT ON TABLE app_user_device IS '用户设备,用于下载授权与并发播放数限制';
CREATE TABLE IF NOT EXISTS app_user_ban_record (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
type VARCHAR(16) NOT NULL, -- BAN/LIMIT/MUTE
reason_code VARCHAR(32) NOT NULL DEFAULT '',
@@ -205,7 +205,7 @@ CREATE INDEX IF NOT EXISTS idx_app_ban_user ON app_user_ban_record (user_id, sta
COMMENT ON TABLE app_user_ban_record IS '封禁/限制与申诉记录';
CREATE TABLE IF NOT EXISTS app_account_deletion (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
status VARCHAR(16) NOT NULL DEFAULT 'pending', -- pending/cancelled/completed
reason VARCHAR(255) NOT NULL DEFAULT '',
@@ -226,7 +226,7 @@ COMMENT ON TABLE app_account_deletion IS '账号注销申请与冷静期';
-- ============================================================
CREATE TABLE IF NOT EXISTS watch_progress (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
drama_id BIGINT NOT NULL,
episode_id BIGINT NOT NULL,
@@ -246,7 +246,7 @@ COMMENT ON TABLE watch_progress IS '每用户每剧一条续看进度(跨端
-- 观看流水:量大,按 watched_at 做声明式月分区,便于按期归档与清理
CREATE TABLE IF NOT EXISTS watch_history (
id BIGINT GENERATED BY DEFAULT AS IDENTITY,
id BIGINT,
user_id BIGINT NOT NULL,
drama_id BIGINT NOT NULL,
episode_id BIGINT NOT NULL,
@@ -263,7 +263,7 @@ CREATE INDEX IF NOT EXISTS idx_watch_history_drama ON watch_history (drama_id, w
COMMENT ON TABLE watch_history IS '观看流水(月分区,保留 12–24 个月)';
CREATE TABLE IF NOT EXISTS user_favorite (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
drama_id BIGINT NOT NULL,
sort INT NOT NULL DEFAULT 0,
@@ -280,7 +280,7 @@ COMMENT ON TABLE user_favorite IS '剧集收藏';
-- 唯一索引是 (ticket_no, created_at);ticket_no 是 UUID,实际唯一性不受影响。
-- 月分区本身由 sql/partition-maintenance.sql 建(含未来 3 个月)。
CREATE TABLE IF NOT EXISTS playback_ticket (
id BIGINT GENERATED BY DEFAULT AS IDENTITY,
id BIGINT,
ticket_no VARCHAR(40) NOT NULL,
user_id BIGINT NOT NULL DEFAULT 0, -- 0 表示未登录的免费集
drama_id BIGINT NOT NULL,
@@ -303,7 +303,7 @@ CREATE INDEX IF NOT EXISTS idx_playback_ticket_user
COMMENT ON TABLE playback_ticket IS '播放票据签发审计;真正的鉴权在签名 URL 上(月分区)';
CREATE TABLE IF NOT EXISTS download_license (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
drama_id BIGINT NOT NULL,
episode_id BIGINT NOT NULL,
@@ -326,7 +326,7 @@ COMMENT ON TABLE download_license IS '离线下载授权与设备绑定(换机
-- ============================================================
CREATE TABLE IF NOT EXISTS content_comment (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
drama_id BIGINT NOT NULL,
episode_id BIGINT NOT NULL DEFAULT 0,
user_id BIGINT NOT NULL,
@@ -352,7 +352,7 @@ CREATE INDEX IF NOT EXISTS idx_comment_user ON content_comment (user_id, created
COMMENT ON TABLE content_comment IS '评论与回复(先审后发)';
CREATE TABLE IF NOT EXISTS content_like (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
target_type VARCHAR(16) NOT NULL, -- DRAMA/EPISODE/COMMENT
target_id BIGINT NOT NULL,
@@ -364,7 +364,7 @@ CREATE INDEX IF NOT EXISTS idx_content_like_target ON content_like (target_type,
COMMENT ON TABLE content_like IS '点赞关系;计数值异步聚合';
CREATE TABLE IF NOT EXISTS content_report (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
reporter_id BIGINT NOT NULL,
target_type VARCHAR(16) NOT NULL, -- COMMENT/USER/DRAMA
target_id BIGINT NOT NULL,
@@ -383,7 +383,7 @@ CREATE INDEX IF NOT EXISTS idx_report_status ON content_report (status, created_
COMMENT ON TABLE content_report IS '举报工单';
CREATE TABLE IF NOT EXISTS user_blocklist (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
blocked_user_id BIGINT NOT NULL,
source VARCHAR(16) NOT NULL DEFAULT 'MANUAL', -- MANUAL/COMMENT
@@ -394,7 +394,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS uk_user_blocklist ON user_blocklist (user_id,
COMMENT ON TABLE user_blocklist IS '拉黑关系';
CREATE TABLE IF NOT EXISTS sensitive_word (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
word VARCHAR(64) NOT NULL,
category VARCHAR(32) NOT NULL DEFAULT '', -- POLITICS/PORN/ABUSE/AD/RELIGION
level VARCHAR(16) NOT NULL DEFAULT 'REVIEW', -- BLOCK/REVIEW/REPLACE
@@ -409,7 +409,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS uk_sensitive_word ON sensitive_word (language,
COMMENT ON TABLE sensitive_word IS '敏感词库';
CREATE TABLE IF NOT EXISTS content_audit_record (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
biz_type VARCHAR(16) NOT NULL, -- COMMENT/DRAMA/AVATAR/CREATOR
biz_id BIGINT NOT NULL,
round INT NOT NULL DEFAULT 1,
@@ -427,7 +427,7 @@ CREATE INDEX IF NOT EXISTS idx_audit_biz ON content_audit_record (biz_type, biz_
COMMENT ON TABLE content_audit_record IS '审核留证(机审 + 人审都记)';
CREATE TABLE IF NOT EXISTS content_share (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL DEFAULT 0,
drama_id BIGINT NOT NULL,
episode_id BIGINT NOT NULL DEFAULT 0,
@@ -442,7 +442,7 @@ COMMENT ON TABLE content_share IS '分享事件,用于渠道效果与裂变分
-- ============================================================
CREATE TABLE IF NOT EXISTS wallet (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
coin_balance BIGINT NOT NULL DEFAULT 0,
total_recharged_coin BIGINT NOT NULL DEFAULT 0,
@@ -457,7 +457,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS uk_wallet_user ON wallet (user_id);
COMMENT ON TABLE wallet IS '金币钱包;所有变动必须同时写 coin_ledger';
CREATE TABLE IF NOT EXISTS product (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
code VARCHAR(64) NOT NULL,
name VARCHAR(128) NOT NULL,
type VARCHAR(16) NOT NULL DEFAULT 'COIN_PACK', -- COIN_PACK/VIP/EPISODE_PACK(VIP 为第二阶段预留)
@@ -483,7 +483,7 @@ CREATE INDEX IF NOT EXISTS idx_product_platform ON product (platform, status);
COMMENT ON TABLE product IS '商品配置(金币包;会员与活动价为后续阶段预留)';
CREATE TABLE IF NOT EXISTS orders (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
order_no VARCHAR(40) NOT NULL,
user_id BIGINT NOT NULL,
product_id BIGINT NOT NULL DEFAULT 0,
@@ -522,7 +522,7 @@ COMMENT ON TABLE orders IS '订单;orders 为保留字规避(order 是 SQL
-- 订单状态流转流水,同样按月分区(同 playback_ticket,主键带分区键)
CREATE TABLE IF NOT EXISTS order_event (
id BIGINT GENERATED BY DEFAULT AS IDENTITY,
id BIGINT,
order_no VARCHAR(40) NOT NULL,
event VARCHAR(32) NOT NULL, -- CREATE/VERIFY_OK/VERIFY_FAIL/DELIVER/REFUND/NOTIFY
from_status VARCHAR(16) NOT NULL DEFAULT '',
@@ -537,7 +537,7 @@ CREATE INDEX IF NOT EXISTS idx_order_event_no ON order_event (order_no, created_
COMMENT ON TABLE order_event IS '订单状态流转流水,支付争议时的证据链(月分区)';
CREATE TABLE IF NOT EXISTS store_receipt (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
platform VARCHAR(16) NOT NULL,
transaction_id VARCHAR(128) NOT NULL,
original_transaction_id VARCHAR(128) NOT NULL DEFAULT '',
@@ -557,7 +557,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS uk_store_receipt ON store_receipt (platform, t
COMMENT ON TABLE store_receipt IS '商店票据去重与校验留证(重放防护)';
CREATE TABLE IF NOT EXISTS coin_ledger (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
change_amount BIGINT NOT NULL, -- 正数入账,负数出账
balance_after BIGINT NOT NULL,
@@ -573,7 +573,7 @@ CREATE INDEX IF NOT EXISTS idx_coin_ledger_user ON coin_ledger (user_id, created
COMMENT ON TABLE coin_ledger IS '金币流水,钱包余额的唯一事实来源';
CREATE TABLE IF NOT EXISTS entitlement (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
drama_id BIGINT NOT NULL DEFAULT 0,
episode_id BIGINT NOT NULL DEFAULT 0, -- 0 表示整剧权益
@@ -593,7 +593,7 @@ CREATE INDEX IF NOT EXISTS idx_entitlement_user ON entitlement (user_id, status)
COMMENT ON TABLE entitlement IS '权益;播放判定优先读这里';
CREATE TABLE IF NOT EXISTS refund_record (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
order_no VARCHAR(40) NOT NULL,
platform VARCHAR(16) NOT NULL DEFAULT '',
refund_id VARCHAR(128) NOT NULL DEFAULT '',
@@ -613,7 +613,7 @@ CREATE INDEX IF NOT EXISTS idx_refund_status ON refund_record (status, created_a
COMMENT ON TABLE refund_record IS '退款与撤销事件,触发权益回收';
CREATE TABLE IF NOT EXISTS reconcile_task (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
biz_date DATE NOT NULL,
platform VARCHAR(16) NOT NULL DEFAULT 'ALL',
total_count INT NOT NULL DEFAULT 0,
@@ -635,7 +635,7 @@ COMMENT ON TABLE reconcile_task IS '每日对账任务(与商店账单比对
-- ============================================================
CREATE TABLE IF NOT EXISTS creator (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL, -- 关联 C 端账号
code VARCHAR(32) NOT NULL,
name VARCHAR(128) NOT NULL,
@@ -663,7 +663,7 @@ CREATE INDEX IF NOT EXISTS idx_creator_status ON creator (status, created_at DES
COMMENT ON TABLE creator IS '创作者主体与资质';
CREATE TABLE IF NOT EXISTS creator_document (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
creator_id BIGINT NOT NULL,
type VARCHAR(32) NOT NULL, -- ID_CARD/BUSINESS_LICENSE/CONTRACT
file_url VARCHAR(512) NOT NULL,
@@ -678,7 +678,7 @@ CREATE INDEX IF NOT EXISTS idx_creator_doc ON creator_document (creator_id, type
COMMENT ON TABLE creator_document IS '创作者资质文件';
CREATE TABLE IF NOT EXISTS content_submission (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
creator_id BIGINT NOT NULL,
drama_id BIGINT NOT NULL,
type VARCHAR(16) NOT NULL DEFAULT 'CREATE', -- CREATE/UPDATE/PUBLISH/OFFLINE
@@ -698,7 +698,7 @@ CREATE INDEX IF NOT EXISTS idx_submission_status ON content_submission (status,
COMMENT ON TABLE content_submission IS '创作者内容提交与审核流转';
CREATE TABLE IF NOT EXISTS creator_stat_daily (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
creator_id BIGINT NOT NULL,
drama_id BIGINT NOT NULL DEFAULT 0,
stat_date DATE NOT NULL,
@@ -715,7 +715,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS uk_creator_stat ON creator_stat_daily (creator
COMMENT ON TABLE creator_stat_daily IS '创作者数据看板日汇总';
CREATE TABLE IF NOT EXISTS creator_settlement (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
creator_id BIGINT NOT NULL,
period VARCHAR(16) NOT NULL, -- 2026-10
revenue BIGINT NOT NULL DEFAULT 0,
@@ -737,7 +737,7 @@ COMMENT ON TABLE creator_settlement IS '预留:创作者结算(第二阶段
-- ============================================================
CREATE TABLE IF NOT EXISTS transcode_task (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
media_asset_id BIGINT NOT NULL DEFAULT 0,
drama_id BIGINT NOT NULL DEFAULT 0,
episode_id BIGINT NOT NULL DEFAULT 0,
@@ -758,7 +758,7 @@ CREATE INDEX IF NOT EXISTS idx_transcode_episode ON transcode_task (episode_id);
COMMENT ON TABLE transcode_task IS '转码任务队列(本地 worker / 云转码)';
CREATE TABLE IF NOT EXISTS media_rendition (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
media_asset_id BIGINT NOT NULL DEFAULT 0,
drama_id BIGINT NOT NULL DEFAULT 0,
episode_id BIGINT NOT NULL DEFAULT 0,
@@ -787,7 +787,7 @@ COMMENT ON TABLE media_rendition IS '多码率产物;播放票据按此生成
-- ============================================================
CREATE TABLE IF NOT EXISTS ops_notice (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
title VARCHAR(128) NOT NULL,
content VARCHAR(2000) NOT NULL DEFAULT '',
target VARCHAR(16) NOT NULL DEFAULT 'ALL', -- ALL/USER/CREATOR
@@ -804,7 +804,7 @@ CREATE INDEX IF NOT EXISTS idx_notice_target ON ops_notice (target, status, publ
COMMENT ON TABLE ops_notice IS '系统公告(创作者审核结果、活动、支付通知)';
CREATE TABLE IF NOT EXISTS ops_daily_stat (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
stat_date DATE NOT NULL,
new_user_count BIGINT NOT NULL DEFAULT 0,
active_user_count BIGINT NOT NULL DEFAULT 0,
@@ -824,7 +824,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS uk_ops_daily_stat ON ops_daily_stat (stat_date
COMMENT ON TABLE ops_daily_stat IS '经营大盘日汇总(含成本口径)';
CREATE TABLE IF NOT EXISTS audit_log (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
biz_type VARCHAR(32) NOT NULL, -- ORDER/ENTITLEMENT/USER/CREATOR/PRICE
biz_id VARCHAR(64) NOT NULL DEFAULT '',
action VARCHAR(32) NOT NULL,
@@ -878,7 +878,7 @@ ALTER TABLE app_user ADD COLUMN IF NOT EXISTS download_max_quality VARCHAR(16) N
-- 下载任务与断点续传进度。分片由客户端直接向 CDN 拉取,服务端只记账:
-- 用它实现"下载中/已暂停/已完成"的跨端展示、断点续传的进度恢复,以及配额统计。
CREATE TABLE IF NOT EXISTS download_task (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
device_id VARCHAR(128) NOT NULL DEFAULT '',
drama_id BIGINT NOT NULL,