c表分别建立a、b表的外键
c.id1,c.id2这样可以吗?

解决方案 »

  1.   

    不好意思,国庆休假忘了这张贴了不能这样建,因为a和b表里面的记录是不一样的。这样会导致c表任何记录都插不进去,见下面的示例create table a(id varchar2(32) primary key);
    create table b(id varchar2(32) primary key);
    create table c(id varchar2(32), logtime date);alter table c
       add constraint FK_c_a foreign key (id)
          references a(id);
          
    alter table c
       add constraint FK_c_b foreign key (id)
          references b(id);
          
    insert into a values ('1');
    insert into b values ('10');insert into c values ('10', sysdate);
    insert into c values ('1', sysdate);
    insert into c values ('100', sysdate);
    出错信息SQL> insert into c values ('10', sysdate);
     
    insert into c values ('10', sysdate)
     
    ORA-02291: 违反完整约束条件 (HCH.FK_C_A) - 未找到父项关键字
    SQL> insert into c values ('1', sysdate);
     
    insert into c values ('1', sysdate)
     
    ORA-02291: 违反完整约束条件 (HCH.FK_C_B) - 未找到父项关键字
    SQL> insert into c values ('100', sysdate);
     
    insert into c values ('100', sysdate)
     
    ORA-02291: 违反完整约束条件 (HCH.FK_C_B) - 未找到父项关键字
      

  2.   

    不好意思,刚才没看仔细。  您的意思是c表建id1和id2两列?这样对程序改动太大了,而且后续维护不方便,暂时不考虑
      

  3.   

    你可以再创建一个表,如d表,里面存放a、b表的id值,在c表上创建d表的外键就可以了
      

  4.   

    很是支持。刚我想用的是用check约束,限制c表的值必须在a和b表的范围内。但这需要用到子查询,这在oracle的check约束中是不成立的。
      

  5.   

    很是支持。刚我想用的是用check约束,限制c表的值必须在a和b表的范围内。但这需要用到子查询,这在oracle的check约束中是不成立的。把a,b表建个视图也不行么?
      

  6.   

    很是支持。刚我想用的是用check约束,限制c表的值必须在a和b表的范围内。但这需要用到子查询,这在oracle的check约束中是不成立的。把a,b表建个视图也不行么?视图上不能建外键,也不能建外键指向视图