找不到父密钥?

时间:2014-03-13 09:48:57

标签: sql oracle foreign-keys

其中一个经典问题......

但我真的找不到父表中的问题所在。我目前正在研究IMDB数据库的迷你版本。我们的老师要求我们采用我们给出的原始数据库,并将其制作成更小,更智能的版本。它应该遵循以下图表:

Database Diagram

到目前为止,我已成功制作了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对。

编辑:请求架构

Movie Schema

Keyword Schema

1 个答案:

答案 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验证表格中的数据(更新/删除表格中的非匹配列)设置...然后应用约束,它应该工作!!