其中一个经典问题......
但我真的找不到父表中的问题所在。我目前正在研究IMDB数据库的迷你版本。我们的老师要求我们采用我们给出的原始数据库,并将其制作成更小,更智能的版本。它应该遵循以下图表:
到目前为止,我已成功制作了COMPANY_NAME,MOVIE_COMPANY,MOVIE,GENRE和PLOT表,目前正在制作KEYWORD。表本身现在存在,但我不能放置外部约束,表示关键字中存在的MOVIE_ID来自父表MOVIE。我一直收到以下错误:
ALTER TABLE KEYWORD
ADD CONSTRAINT FK_MOVIE_ID_KEYWORD
FOREIGN KEY (MOVIE_ID)
REFERENCES MOVIE (ID)
Error report -
SQL Error: ORA-02298: cannot validate (DB_031.FK_MOVIE_ID_KEYWORD) - parent keys not found
02298. 00000 - "cannot validate (%s.%s) - parent keys not found"
*Cause: an alter table validating constraint failed because the table has
child records.
*Action: Obvious <-- especially this part is annoying
我已经查看了类似的问题,然后检查了几次我的陈述,但到目前为止我还是看不出为什么会失败。 GENRE和PLOT表在数据方面都是空的,因为它们是为了将来扩展数据库而制作的。但KEYWORD已经有一组KEYWORD,MOVIE_ID对。
编辑:请求架构
答案 0 :(得分:1)
您引用错误的col
作为父参考....它应该是MOVIE_ID
而不是ID
(你已经完成)
以这种方式尝试:
ALTER TABLE KEYWORD
ADD CONSTRAINT FK_MOVIE_ID_KEYWORD
FOREIGN KEY (MOVIE_ID)
REFERENCES MOVIE (MOVIE_ID) /* <- notice this */
修改强>
我能想到的唯一可能的原因是你的表包含不匹配的数据......这就是你因为不匹配而出错的原因!!
简单地....你的MOVIE_ID
包含另一个表的ID
列中不存在的值....因为在设置约束时不匹配,所以弹出错误!!
解决方案:根据您需要的id
验证表格中的数据(更新/删除表格中的非匹配列)设置...然后应用约束,它应该工作!!