1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- -- 日历内容记录表DDL脚本
- -- 用于存储用户的日历内容记录信息
- create table public.calendar_records
- (
- id serial
- primary key,
- openid varchar(255) not null,
- month_key varchar(7) not null,
- calendar_content jsonb not null,
- created_at timestamp with time zone default current_timestamp not null,
- updated_at timestamp with time zone default current_timestamp not null
- );
- comment on table public.calendar_records is '日历内容记录表';
- comment on column public.calendar_records.id is '主键ID';
- comment on column public.calendar_records.openid is '微信用户openid';
- comment on column public.calendar_records.month_key is '月份标识,格式为YYYY-MM';
- comment on column public.calendar_records.calendar_content is '日历内容,JSON数组格式';
- comment on column public.calendar_records.created_at is '记录创建时间';
- comment on column public.calendar_records.updated_at is '记录更新时间';
- -- 创建索引以提高查询性能
- create index idx_calendar_records_openid on public.calendar_records(openid);
- create index idx_calendar_records_month_key on public.calendar_records(month_key);
- create index idx_calendar_records_openid_month on public.calendar_records(openid, month_key);
- create index idx_calendar_records_created_at on public.calendar_records(created_at);
- create index idx_calendar_records_updated_at on public.calendar_records(updated_at);
- -- 创建更新时间触发器函数
- create or replace function update_calendar_records_updated_at()
- returns trigger as $$
- begin
- new.updated_at = current_timestamp;
- return new;
- end;
- $$ language plpgsql;
- -- 创建触发器
- create trigger trigger_update_calendar_records_updated_at
- before update on public.calendar_records
- for each row
- execute function update_calendar_records_updated_at();
- -- 创建唯一约束(一个用户在同一个月份只能有一条记录)
- create unique index idx_calendar_records_openid_month_unique
- on public.calendar_records(openid, month_key);
- -- 添加约束检查月份格式
- alter table public.calendar_records
- add constraint chk_calendar_records_month_format
- check (month_key ~ '^\d{4}-\d{2}$');
- -- 添加约束检查openid格式(微信openid通常是28位字符串)
- alter table public.calendar_records
- add constraint chk_calendar_records_openid_format
- check (length(openid) = 28 and openid ~ '^[a-zA-Z0-9_-]+$');
- -- 添加约束检查JSON内容不为空
- alter table public.calendar_records
- add constraint chk_calendar_records_content_not_empty
- check (jsonb_array_length(calendar_content) >= 0);
|