create table if not exists form_transitions ( id uuid not null primary key default uuidv7(), source_id uuid not null references portals(id) on delete cascade, dest_id uuid not null references portals(id) on delete restrict, condition jsonb not null default 'null' ); create index on form_transitions (source_id); create table if not exists field_form_prompts ( id uuid not null primary key default uuidv7(), field_id uuid not null references fields(id) on delete cascade, language text not null, content text not null default '', unique (field_id, language) ); create index on field_form_prompts (field_id); create table if not exists form_sessions ( id uuid not null primary key default uuidv7(), user_id uuid references users(id) on delete cascade ); create table if not exists form_touch_points ( id uuid not null primary key default uuidv7(), -- `on delete restrict` errs on the side of conservatism, but is not known -- to be crucial. form_session_id uuid not null references form_sessions(id) on delete restrict, -- `on delete restrict` errs on the side of conservatism, but is not known -- to be crucial. portal_id uuid not null references portals(id) on delete restrict, -- Points to a row in the portal's backing table, so foreign key constraints -- do not apply here. row_id uuid not null );