如果用触发器保障的话,提交的时候子表中必然没有数据,无法做到。
Sybase的联系中有个check on commit,子表在提交时才检查约束,
比如:是否存在父纪录。我相信Oracle中一定有解决的办法,会者不难,
请各位不吝赐教啊!

解决方案 »

  1.   

    委员会表(id,name,....)会编号,名称
    委员表(idno,name,id...)委员编号,委员姓名,所属会编号select idno,name,(select name from 委员会表 where id=idno) noname from 委员表 group by id having cound(1)>=3;
      

  2.   

    没有解决方法
    关系数据库提倡一个依存关系
    皮之不存,毛将焉附如果非要这样做的话,那就应该建立存储过程并需要辅助相应的存储点(savepoint)进行处理
    不过我认为这样意义不大
      

  3.   

    据我所知,这确实是关系数据库的一大弱点,
    但Sybase有check on commit来解决,
    Oracle没有道理不支持啊 :)
      

  4.   

    SQL> CREATE TABLE orders
      2    (ord_num NUMBER, CONSTRAINT unq_num UNIQUE (ord_num)
      3     INITIALLY DEFERRED DEFERRABLE);表已创建。SQL> insert into orders values(1);已创建 1 行。SQL> insert into orders values(1);已创建 1 行。SQL> commit;
    commit
    *
    ERROR 位于第 1 行:
    ORA-02091: 事务处理已重算
    ORA-00001: 违反唯一约束条件 (SCOTT.UNQ_NUM)
    SQL> CREATE TABLE orders2
      2    (ord_num NUMBER, CONSTRAINT unq_num UNIQUE (ord_num) );
      (ord_num NUMBER, CONSTRAINT unq_num UNIQUE (ord_num) )
                                  *
    ERROR 位于第 2 行:
    ORA-02264: 名称已被一现有约束条件占用
    SQL> CREATE TABLE orders2
      2    (ord_num NUMBER, CONSTRAINT unq_num2 UNIQUE (ord_num) );表已创建。SQL> insert into orders2 values(1);已创建 1 行。SQL> insert into orders2 values(1);
    insert into orders2 values(1)
    *
    ERROR 位于第 1 行:
    ORA-00001: 违反唯一约束条件 (SCOTT.UNQ_NUM2)
    SQL>
      

  5.   

    to maohaisheng(www.chinaspirit.net) 
    我不知道你在说什么
      

  6.   

    不好意思,没说明白
    oracle在进行表级或者列给约束定义的时候,可以选择DEFERRABLE或者NOT DEFERRABLE选项。当选择了DEFERRABLE选项,可以将指定将约束检查推迟到事务结束。而NOT DEFERRABLE选项指定在每个DML语句即将结束时进行约束条件的检查
      

  7.   

    选择了DEFERRABLE选项
    可以通过SET CONSTRAINTS 语句控制约束检查
    文档上面的例子:
    Setting Constraints Examples
    The following statement sets all deferrable constraints in this transaction to be checked immediately following each DML statement: 
    SET CONSTRAINTS ALL IMMEDIATE;
    The following statement checks three deferred constraints when the transaction is committed: 
    SET CONSTRAINTS unq_name, scott.nn_sal,
      adams.pk_dept@dblink DEFERRED;
    注:以上测试范例来自ORACLE文档
      

  8.   

    楼主的想法是可以理解的。
    但“杀鸡杀猴各有各杀法”,不能强求一律。
    百花齐放嘛。
    Oracle和Sybase都是做database的,谁说他们不在相互学习。
      

  9.   

    非常感谢 maohaisheng(www.chinaspirit.net)
    用你的方法完全可以约束上述的一对多关系!问题解决了,BlueskyWide(谈趣者) 说的对,
    我的看法和你完全一样,Sybase能做到的Oracle
    一定能做到