我有一张记录在电影院观看的电影的表格:
CREATE TABLE cinema_movie_name (
id integer DEFAULT nextval('cinema_movie_name_id_seq'::regclass) PRIMARY KEY,
cinema_id integer NOT NULL REFERENCES cinema(id) ON DELETE CASCADE ON UPDATE RESTRICT,
name text NOT NULL,
movie_id integer REFERENCES movie(id) ON DELETE SET NULL ON UPDATE RESTRICT,
created_at timestamp with time zone NOT NULL DEFAULT now()
);
每次我们在电影院看到一部新电影的名字,我们都会把它记录在这个表中,并将它映射到movie_id
我们的数据库中。
当前的唯一性是强制执行的(cinema_id, name)
,即
CREATE UNIQUE INDEX cinema_movie_name_cinema_id_name_idx ON cinema_movie_name(cinema_id, name);
问题是,在很长一段时间内,可能会有多部同名的不同电影,即在某个任意持续时间(id, cinema_id, name, movie_id)
变得无效之后。
因此,我需要创建一个索引,在±3 个月(cinema_id, name)
内实施唯一约束。created_at
如何使用时间列创建唯一索引?
我会添加一列
is_current
或类似的东西来指示电影是否是“当前”电影,然后您可以仅在“当前”电影上创建唯一索引你可以有一份固定的工作,将老电影设置为
is_current = false