30 lines
1.6 KiB
PL/PgSQL
30 lines
1.6 KiB
PL/PgSQL
-- 已有库完成 004/005/006/007 后执行;最新空库基线包含此结构,不执行本文件。
|
|
-- 旧收藏全部保持功能收藏(新列 NULL),不猜测具体底图,不改旧 likes。
|
|
-- 删除旧唯一约束并创建两种部分唯一索引均在同一事务内完成。
|
|
BEGIN;
|
|
SET LOCAL TIME ZONE 'UTC';
|
|
SET LOCAL lock_timeout = '5s';
|
|
SET LOCAL search_path = public, pg_catalog;
|
|
|
|
ALTER TABLE public.favorites
|
|
ADD COLUMN worksheet_resource_id varchar(128) COLLATE "C",
|
|
ADD CONSTRAINT favorites_resource_id_check CHECK (
|
|
worksheet_resource_id IS NULL OR length(btrim(worksheet_resource_id)) > 0
|
|
);
|
|
ALTER TABLE public.favorites DROP CONSTRAINT favorites_user_worksheet_key;
|
|
|
|
-- NULL 表示功能收藏;非 NULL 表示完整内容收藏,不另加 type 字段。
|
|
-- 部分唯一索引分别去重,允许同用户收藏一个功能及其中多个资源。
|
|
CREATE UNIQUE INDEX favorites_user_worksheet_key
|
|
ON public.favorites (user_id, worksheet_id)
|
|
WHERE worksheet_resource_id IS NULL;
|
|
CREATE UNIQUE INDEX favorites_user_resource_key
|
|
ON public.favorites (user_id, worksheet_resource_id)
|
|
WHERE worksheet_resource_id IS NOT NULL;
|
|
|
|
COMMENT ON TABLE public.favorites IS '功能和完整内容的当前收藏;取消即删除;仅功能收藏增减 worksheets.likes';
|
|
COMMENT ON COLUMN public.favorites.worksheet_id IS '稳定功能逻辑关联;内容收藏的功能归属由服务端查询确定,历史缺失时保留';
|
|
COMMENT ON COLUMN public.favorites.worksheet_resource_id IS 'NULL 是功能收藏,非 NULL 是完整内容收藏;逻辑关联,缺失/下架不清空,不退化为功能收藏';
|
|
|
|
COMMIT;
|