我有两张表,一张叫做ballots,一张叫做votes。Ballots存储了一个字符串列表,表示人们可以投票的选项:
CREATE TABLE IF NOT EXISTS Polls (
id SERIAL PRIMARY KEY,
options text[]
);
Votes保存了用户进行的投票(其中投票是表示他们投票选项索引的整数):
CREATE TABLE IF NOT EXISTS Votes (
id SERIAL PRIMARY KEY,
poll_id integer references Polls(id),
value integer NOT NULL ,
cast_by integer NOT NULL
);
我希望确保每当Votes表中创建一行时,对应的Polls表中的行(指poll_id相匹配的行)'value' 的值在[0,length(options))范围内。
有没有可以实现此功能的检查或外键约束?还是需要某种触发器?如果需要触发器,那么触发器应该是什么样子的?是否存在性能问题?手动使用SELECT语句查询相应投票,在插入Votes表之前断言'value'有效,这种方法与使用触发器的性能相同吗?