用于限制属性的SQL语句

时间:2016-03-27 06:22:08

标签: mysql sql database

我有3个表REVIEWPAPERPCMEMBER,其代码如下所示:

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成员和#34;进行审核。不确定我应该使用哪些CHECK约束?我只需要这个来创建表格。感谢

1 个答案:

答案 0 :(得分:1)

实现此类检查约束的一种方法是使用执行检查的标量函数。

以下函数,给定纸质ID,将检查纸张是否仅由3个成员审核,如果满足条件则返回1,否则返回0。

CREATE FUNCTION isReviewdByThreeMembers (
    @paperID NUMBER(10)
)
RETURNS INTEGER
AS
BEGIN
    DECLARE @count INTEGER

     SELECT @count = COUNT(*) 
       FROM Review 
      WHERE paper_id = @paperID


     RETURN CASE 
        WHEN @count = 3 THEN 1
        ELSE 0 
        END
END

然后在检查约束中使用此函数,如下所示:

CHECK (isReviewdByThreeMembers(paper_id) = 1)

您提到您希望每篇论文“仅由3位成员审核”,但这种情况永远不会被尚未存在的记录所满足,因为每篇新论文最初都会从没有评论开始,并逐渐获得新的评论,直到它到达3。

如果您要修改约束以允许“最多3个审阅者”审阅每篇论文,那么约束实际上会更有用。也许与另一个约束相结合,一旦3个必要的评论完成,可能会阻止论文的状态转换为“已审查”或“已完成”。