需要在SQL
属性限制为3个值我有3代表审查,纸张和PCMEMBER和代码是如下提到:需要在SQL
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约束?我只是需要这个创建表。谢谢
创建:
- 标志
PAPER.reviewed DEFAULT 0
- 插入/更新触发客户端
- 触发器
REVIEW
防止标志更改为全自动设置(撤消)PAPER.reviewed
标志时的相关文件已经(还没有)完全三个审阅者(在更新为:OLD.paper_id和NEW.paper_id) - 触发器
REVIEW
以防止每个论文有三个以上的审阅者。
更新
实施例用于创建触发
DELIMITER //
CREATE TRIGGER `chck_pcmem` AFTER INSERT ON `review` FOR EACH ROW BEGIN
IF ((SELECT COUNT(1) FROM review WHERE paper_id = NEW.paper_id) > 3) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Only 3 PC members per paper';
END IF;
END//
DELIMITER ;
Hi paul,谢谢你的回复。我试图找出上述的触发器声明。尝试后,我能够得到这样的: CREATE TRIGGER chck_pcmem检讨 AFTER INSERT AS IF EXISTS(SELECT COUNT(pcmem_id)> 3评分) BEGIN( '每篇论文只有3 PC成员。') RAISERROR; END GO 是对不起? –
我添加了一个创建触发器的例子。我建议使用像HeidiSQL这样的工具来创建触发器,然后导出它们。 –
完美!非常感谢你的帮助保罗! –
我看到的问题是,在一些点(S)你不会有3个审阅者。当你添加第一个(三个)时,你只会有一个。您可以尝试确保您的应用程序始终一次添加三个,但这似乎比它的价值更麻烦。
我的建议是通过您的应用程序强制执行此操作,并可能在表格中插入一个触发器以防止添加超过三个。在大多数SQL变体中,您可以通过计算列和约束的组合来完成此操作,但正如Gordon指出的那样,MySQL不强制执行它们。
您正在使用'与MySQL check'约束(防止每纸超过3层的评论上插入件)。你知道MySQL不强制执行它们吗? –
嗨,戈登,是的,我知道它。想知道是否有其他方法可以解决这个问题?触发器? –
对于'paper_type',您可以使用'enum'或更好的引用'paper_types'表的FK。 –