-- B08计划与真实发布分开;读者反馈没有run归因字段。 CREATE TABLE public.muse_serial_plan ( plan_id uuid PRIMARY KEY, author_id text NOT NULL, work_id text NOT NULL, revision integer NOT NULL CHECK(revision > 0) ); CREATE TABLE public.muse_serial_plan_version ( plan_id uuid NOT NULL REFERENCES public.muse_serial_plan, revision integer NOT NULL CHECK(revision > 0), payload jsonb NOT NULL, content_hash text NOT NULL, PRIMARY KEY(plan_id, revision) ); CREATE TABLE public.muse_release ( release_id uuid PRIMARY KEY, author_id text NOT NULL, work_id text NOT NULL, delivery_id uuid NOT NULL REFERENCES public.muse_delivery, payload jsonb NOT NULL, content_hash text NOT NULL ); CREATE TABLE public.muse_reader_feedback ( feedback_id uuid PRIMARY KEY, author_id text NOT NULL, work_id text NOT NULL, release_id uuid REFERENCES public.muse_release, payload jsonb NOT NULL, content_hash text NOT NULL ); CREATE TRIGGER muse_serial_history_immutable BEFORE UPDATE OR DELETE ON public.muse_serial_plan_version FOR EACH ROW EXECUTE FUNCTION public.muse_guard_literary_history(); CREATE TRIGGER muse_release_immutable BEFORE UPDATE OR DELETE ON public.muse_release FOR EACH ROW EXECUTE FUNCTION public.muse_guard_literary_history(); CREATE TRIGGER muse_reader_feedback_immutable BEFORE UPDATE OR DELETE ON public.muse_reader_feedback FOR EACH ROW EXECUTE FUNCTION public.muse_guard_literary_history(); REVOKE ALL ON public.muse_serial_plan,public.muse_serial_plan_version, public.muse_release,public.muse_reader_feedback FROM muse_eval; GRANT SELECT,INSERT ON public.muse_serial_plan,public.muse_serial_plan_version, public.muse_release,public.muse_reader_feedback TO muse_app; GRANT UPDATE(revision) ON public.muse_serial_plan TO muse_app;