好的,所以我需要创建一个触发器来检查电影的评论者是否对同一部电影评了两次。
我写了这个:
create or replace
trigger viewer_insert
BEFORE INSERT ON viewer
FOR EACH ROW
DECLARE
-- create a variable to store the count of rows
counter number;
BEGIN
--Any reviewer can't review the same movie twice
SELECT count(*) INTO counter
FROM viewer
WHERE "USERID"=:new."USERID";
IF counter = 1
THEN RAISE_APPLICATION_ERROR('-20012', 'Constraint Violated!');
END IF;
END;
问题在于,当我测试它时,我仍然可以为同一部电影评分同一部电影。有没有我不做的事情?
答案 0 :(得分:2)
经验法则是
不要做任何已经在DBMS引擎中的程序设计
我的意思是,在你的情况下,在(userid,movieid)上创建一个唯一约束。
ALTER TABLE viewer
add CONSTRAINT user_movie_unique UNIQUE (userid, movieid);