我正在创建一个电影数据库,您可以在其中插入电影(身份证,导演,出版年份...),导演,演员(身份证,出生日期,死亡日期日期)。我有一个触发器问题,因为在表格中我想确保演员,当你想要添加一个新演员时,他的出生年份不能大于电影出版年份。但随着我写的触发器,我无法插入任何新的演员,因为出生日期无法与电影出版年相比,因为电影尚不存在。而且我也不能添加任何新电影,因为我对导演也有相同的触发器 - 这也不起作用,而且这部电影还有一个外国强制性的key-id导演。这有点复杂,所以我希望你能得到我的意思
create or replace
trigger "XVIKD00"."DATUM_NARODENIA_HEREC"
BEFORE INSERT OR UPDATE
ON HERCI
FOR EACH ROW
DECLARE
l_ROK_VYDANIA filmy.ROK_VYD%TYPE;
BEGIN
SELECT FILMY.ROK_VYD
INTO l_ROK_VYDANIA
FROM FILMY
WHERE FILMY.ID_FILM = :new.ID_HEREC;
IF( (:new.dat_umr_her is not null) and( FILMY.ROK_VYD is not null)
extract( year from :new.dat_nar_her ) > l_ROK_VYDANIA )
THEN
RAISE_APPLICATION_ERROR(-2009,'Dátumy nie su v správnom časovom
slede');
END IF;
END;
答案 0 :(得分:0)
您的表之间存在循环依赖关系,这样您就无法插入任何记录,因为其他记录尚不存在。
要以合理的方式处理这个问题,你应该:
Movies
id
name
Publishing_Year
Director
id
name
birthDate
Actor
id
name
birthDate
这样,您始终可以创建其中的每一个,而不会与其他人有任何依赖关系。
然后当你想说一些导演指导一部电影时,你会插入这样的表:
movie_director
id
movie_id
director_id
如果你想说某个演员在电影中盯着你在这样的表格中插入一条记录:
movie_actor
id
movie_id
actor_id
如果你想验证导演或演员的年龄是否足以进入所述电影,你可以在这两个表中放置验证该触发器的触发器。