-- DROP TABLE IF EXISTS public.reference CASCADE; CREATE TABLE public.reference ( id BIGSERIAL PRIMARY KEY, user_id BIGINT NOT NULL REFERENCES public.user(id), uri TEXT NOT NULL UNIQUE, created_ts TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_ts TIMESTAMPTZ NOT NULL DEFAULT NOW() ); CREATE INDEX idx__public__reference__user_id ON public.reference (user_id); CREATE INDEX idx__public__reference__created_ts ON public.reference (created_ts); CREATE INDEX idx__public__reference__updated_ts ON public.reference (updated_ts); -- DROP TABLE IF EXISTS public.agreement_reference CASCADE; CREATE TABLE public.agreement_reference ( id BIGSERIAL PRIMARY KEY, user_id BIGINT NOT NULL REFERENCES public.user(id), agreement_id BIGINT NOT NULL REFERENCES public.agreement(id), reference_id BIGINT NOT NULL REFERENCES public.reference(id), created_ts TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_ts TIMESTAMPTZ NOT NULL DEFAULT NOW(), CONSTRAINT uniq__agreement_reference_id UNIQUE (user_id, agreement_id, reference_id) ); CREATE INDEX idx__public__agreement_reference__user_id ON public.agreement_reference (user_id); CREATE INDEX idx__public__agreement_reference__agreement_id ON public.agreement_reference (agreement_id); CREATE INDEX idx__public__agreement_reference__reference_id ON public.agreement_reference (reference_id); CREATE INDEX idx__public__agreement_reference__created_ts ON public.agreement_reference (created_ts); CREATE INDEX idx__public__agreement_reference__updated_ts ON public.agreement_reference (updated_ts); ALTER TABLE public.agreement ALTER COLUMN parent DROP NOT NULL;