在oracle中
我在表中定义了  联合主健 upcode+ditem+xialiao
其中:
upcode 不允许为空
ditem 不允许为空
xialiao 允许为空
三个能否成为联合主健
我现在遇到了这么一个问题 
虽然xialiao有些时候 是空的 
但是 当有借用现象的话 
xialiao却不一定是一样的 
比如 我借用了 TSK254-11-11-100这个upcode的话
他的情况有可能就是 xialiao=10
另外一条有可能就是  xialiao=20
这两个记录应该都保存在数据库表中
以便下次再次查询的时候 能够显示出来

解决方案 »

  1.   

    联合主键均不能为空,可以自己试试
    SQL> create table t_20(upcode varchar2(20),ditem varchar2(20),xialiao varchar2(10),name varchar2(20)
    );表已创建。SQL> desc t_20;
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     UPCODE                                             VARCHAR2(20)
     DITEM                                              VARCHAR2(20)
     XIALIAO                                            VARCHAR2(10)
     NAME                                               VARCHAR2(20)SQL> alter table t_20 add primary key(upcode,ditem,xialiao);表已更改。SQL> desc t_20;
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     UPCODE                                    NOT NULL VARCHAR2(20)
     DITEM                                     NOT NULL VARCHAR2(20)
     XIALIAO                                   NOT NULL VARCHAR2(10)
     NAME                                               VARCHAR2(20)建成主键后都不为空了第二个借用的没理解啥意思
      

  2.   


    建为主键的字段是不能为null的,但是 建为unque的字段是可以有null值的。
      

  3.   

    主键作为标识一条记录的方式,必定是唯一的,不为空的,
    如果你的联合主键中的xialiao 如果有为空的情况
    你必须重新考虑这个联合主键的组合;或者想办法让xialiao不为空。
      

  4.   

    借用是这么一回事
    比如upcode是父节点  dcode是孩子节点 ditem 是这个dcode在upcode中排在第几位
    [code=BatchFile]
    序号 upcode                       dcode           dname          ditem 材料
             xialiao
    7 TSK254-11-11-000 TSK254-11-11-001 门侧板(左) 2

    9 TSK254-11-11-001                         垫板 4X80X100 2 热轧耐侯钢板 4-09CuPCrNi-B 4*80*100
    10 TSK254-11-11-001                         垫板 4X80X220 3 热轧耐侯钢板 4-09CuPCrNi-B 4*80*220
    11 TSK254-11-11-000 TSK254-11-11-001 门侧板(右) 3
    13 TSK254-11-11-001                         垫板 4X80X100 2 热轧耐侯钢板 4-09CuPCrNi-B 4*80*110
    14 TSK254-11-11-001                         垫板 4X80X220 3 热轧耐侯钢板 4-09CuPCrNi-B 4*80*200
    [/code]
    当为上面这种情况的时候 我能不能唯一确定他们之间对应关系?
    dcode=TSK254-11-11-001 dname=门侧板(左)的xialiao为4*80*100    4*80*220
    dcode=TSK254-11-11-001 dname=门侧板(右)的xialiao为4*80*110    4*80*200

    相当于一个dcode对应两种xialiao
    请问这种情况 我该如何在表中去实现?
      

  5.   


    这种情况,你查询的时候,根据dname字段不就可以查询出不同的数据吗?一个是  门侧板(左) 一个  门侧板(右)啊,数据不重复了吧!
      

  6.   

    但是还是有问题 
    基于他的孩子节点的话 
    他们的dname还是一样的!例如:6楼的9/10/13/14这四条记录而言