Sql 数据库管理系统中基于投票的审批系统
我尝试创建一个系统,通过大众投票自动批准提议的职位。我目前正在评估我可以在DBMS中完成的部分,以及它是否合理。我使用PostgreSQL,如果这对我有帮助的话,我可以升级到最新版本 我的数据库结构如下所示:Sql 数据库管理系统中基于投票的审批系统,sql,postgresql,database-design,Sql,Postgresql,Database Design,我尝试创建一个系统,通过大众投票自动批准提议的职位。我目前正在评估我可以在DBMS中完成的部分,以及它是否合理。我使用PostgreSQL,如果这对我有帮助的话,我可以升级到最新版本 我的数据库结构如下所示: CREATE TYPE state AS ENUM ('write', 'vote'); CREATE TABLE post ( id SERIAL NOT NULL CONSTRAINT post_pkey PRIMARY KEY, title VARCHAR(100),
CREATE TYPE state AS ENUM ('write', 'vote');
CREATE TABLE post
(
id SERIAL NOT NULL CONSTRAINT post_pkey PRIMARY KEY,
title VARCHAR(100),
state state
);
CREATE TABLE proposal
(
id SERIAL NOT NULL CONSTRAINT proposal_pkey PRIMARY KEY,
post_id INTEGER CONSTRAINT proposal_post_fkey REFERENCES post,
text TEXT
);
CREATE TABLE accepted
(
id SERIAL NOT NULL CONSTRAINT accepted_pkey PRIMARY KEY,
post_id INTEGER CONSTRAINT accepted_post_fkey REFERENCES post,
text TEXT
);
CREATE TABLE vote
(
proposal_id INTEGER CONSTRAINT vote_proposal_fkey REFERENCES proposal,
user_id INTEGER,
PRIMARY KEY(proposal_id, user_ID)
);
我现在的目标是基于一个或多个查询,将提案复制到accepted,并根据以下规则设置要写入的状态:
我现在的问题是,这是否可以明智地在PostgreSQL内部完成,还是应该在外部完成,以及您是否可以为我指出正确的查询方向。假设投票是逐个插入的,而不是批量插入的,那么您可以使用
投票
上的触发器执行您想要的操作
基本上,当检索到投票时,触发器将:
- 计算提案的总票数
- 检查总数是否符合阈值。如果是这样的话,那么做你想要的“接受”
接受的
表,我只需要在提案
中有一个标志。我还将修改提案
,以获得总票数。而且,我不清楚什么或者提案是否相互竞争——也就是说,如果一个提案被接受,是否会妨碍对其他提案的投票
此外,如果提案中的选票被“删除”,您不清楚会发生什么。好的方面。为了brevety的缘故,我从所有这些中删除了一个组件。它们有一个时间跨度。只有达到投票门槛时,阶段才会切换。选票不会从提案中删除。它们留着待会儿用。他们的选票确实相互竞争。因此,我有一个问题,就是在转换时,两项建议的票数可能是相同的。我不知道如何在一个查询中过滤掉它。