mysql - 需要在 SQL 中将一个属性限制为 3 个值

标签 mysql sql database netbeans

我有 3 个表 REVIEW、PAPER 和 PCMEMBER,其代码如下所示:

CREATE TABLE REVIEW(
due_date DATE NOT NULL,
review_date DATE NOT NULL,
recommendation VARCHAR(50) NOT NULL,
comment VARCHAR(50) NOT NULL,
pcmem_id NUMBER(10) NOT NULL,
paper_id NUMBER(10) NOT NULL,
CONSTRAINT review_pk PRIMARY KEY (pcmem_id,paper_id),
CONSTRAINT review_fk FOREIGN KEY(paper_id)
REFERENCES PAPER(paper_id),
CONSTRAINT review_fk1 FOREIGN KEY(pcmem_id)
REFERENCES PCMEMBER(pcmem_id));

CREATE TABLE PCMEMBER(
pcmem_id NUMBER(10) NOT NULL PRIMARY KEY,
pc_fname VARCHAR(20) NOT NULL,
pc_sname VARCHAR(20) NOT NULL,
pc_title VARCHAR (20) NOT NULL,
pc_position VARCHAR(20) NOT NULL,
affiliation VARCHAR(20) NOT NULL,
pc_email VARCHAR(20) NOT NULL,
track_id NUMBER(6) NOT NULL,
CONSTRAINT pcmember_fk FOREIGN KEY(track_id)
REFERENCES TRACK(track_id));

CREATE TABLE PAPER(
paper_id NUMBER(10) PRIMARY KEY NOT NULL,
paper_title VARCHAR(20) NOT NULL,
abstract VARCHAR(50) NOT NULL,
paper_type VARCHAR(20) NOT NULL,
submission_date DATE NOT NULL,
track_id NUMBER(6) NOT NULL,
CONSTRAINT paper_fk FOREIGN KEY(track_id)
REFERENCES TRACK(track_id),
CONSTRAINT chk_type CHECK(paper_type IN ('full paper','Research-in-Progress','posters')),
);

我正在尝试添加一个条件,即“每篇论文将由恰好 3 名 PC 成员审阅”。不确定我应该使用什么 CHECK 约束?我只需要这个来创建表。谢谢

最佳答案

我看到的问题是,在某些 点,您不会恰好有 3 个审阅者。当您添加第一个(三个)时,您将只有一个。您可以尝试确保您的应用程序始终恰好添加三个,一次全部添加,但这似乎比它的值(value)更麻烦。

我的建议是通过您的应用程序强制执行此操作,并可能在表上放置一个触发器以防止添加超过三个的插入。在大多数 SQL 变体中,您可以通过计算列和 CHECK 约束的组合来执行此操作,但正如 Gordon 指出的那样,MySQL 不会强制执行它们。

关于mysql - 需要在 SQL 中将一个属性限制为 3 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36262177/

相关文章:

php - MySQL排名如果为空则显示空白页

php - 如何从以下连接 php/MySQLi 查找最后插入的 id、事务、提交、回滚

mysql - SQL 查询与 EXISTS 的差异

php - 千城万户的关系,什么才是正确的做法?

php - 准备($ sql)函数不适用于一个脚本

database - 无法登录 Oracle Enterprise Manager Express

php - 计算列中的 'most selected value'

sql - 创建在列的特定值上重置的排名

sql - 有重复组时选择最后一组的第一条记录

mysql - 维护实时远程 MySQL 数据库的本地只读副本的有效方法是什么?