一张表有其中三个字段 asset1,asset2,equip组成复合主键。
确定一条设备时由asset1+asset2 +equip唯一确定
确定一条资产时equip为null,由asset1+asset2 唯一确定。这样是否可行!先谢过!

解决方案 »

  1.   

    主键不可以为空。。在确定一条资产,你可以将equip字段设为一个非空的固定值,这样还是由asset1+asset2来唯一确定的。
      

  2.   

    liusong_china 这样也是可行的!liusong_china:您确定复合主键中的任何一个被设为主键的字段都不为null吧?
      

  3.   

    主键肯定不为空,建议用楼上#1方法
    或者只用asset1+asset2作为主键
    至于唯一确定看数据是否唯一便可
      

  4.   

    不能为null
    如果希望可以为空,可以用组合唯一约束
      

  5.   

    UNIQUE约束要求,对于列或列组合而言,表中每行的值必须是不同的。
    UNIQUE约束的怪异之处在于,可以在键列输入NULL值。在键列中,可能有任意数量的包含NULL值得行。
    UNIQUE约束通过索引来实施。在定义UNIQUE约束时,Oracle将查看键列上的索引,如果不存在,就创建一个。
    索引(称为B*树索引)的结构不包含NULL值,正因为如此,才允许出现多个包含null的行。
    选择 WHERE key_column is NULL不使用索引(因为索引不包含NULL),因此总是导致扫描整个表。所以说组合唯一约束的列可以全为空或某几个为空,列是否能为空是由not null约束决定的。SQL> create table c (a number(10), b varchar(10),c varchar(10));Table created.SQL> alter table c add constraint c_uc unique(a,b,c);Table altered.SQL> insert into c values(1,null,null);1 row created.SQL> insert into c values(null,null,'c');1 row created.SQL> insert into c values(null,null,null);1 row created.
      

  6.   

    主键肯定不能为空,因为主键约束的实现实际上是UNIQUE约束和NOT NULL约束的组合。