第一个表
 create table t_user(user_id varchar2(10) primary key,
 user_name varchar2(20) not null,
 password varchar2(20),
 contact_tel varchar2(30),
 email varchar2(30),
 create_date date);
第二个表
create table t_client (id number(4)  primary key,
pid number(4) not null,
name varchar2(30) not null,
client_id varchar2(10),
client_level char(3),
bank_acct_no varchar2(30),
contact_tel  varchar2(30),
address     varchar2(30),
zip_code varchar2(10),
is_leaf char(1) default 'Y' check (is_leaf in('Y','N')),
is_client char(1) default 'N' check (is_client in('Y','N')
));
第三个表create table t_flow_card_master(vou_no varchar2(16) primary key,          
fiscal_year number not null,
fiscal_period number not null,
client_id varchar2(10) references t_client(client_id) not null,   //////////// 为什么我这样创建外键不对 提示我ORA-02270: 此列列表的唯一或主键不匹配
opr_type char(1) default 'A' check (opr_type in('A','D')),
record_date Date not null,
recorder_id varchar2(10)references t_user(user_id) not null,
vou_sts char(1) default 'N'check (vou_sts in('N','S')),
confirmer_id  varchar2(10)references t_user(user_id),
conf_date Date,
spotter_id varchar2(10) references t_user(user_id),
spot_date Date,
spot_re varchar2(60),
spot_flag char(1) default 'N' check (spot_flag in ('Y','N')),
adjust_time Date,
adjuster_id varchar2(10) references t_user(user_id)
);

解决方案 »

  1.   

    client_id number(4) references t_client(id) not null,
    你引用的必须是t_client该表的主键
      

  2.   

    A表是父表 ,B表是子表   
    如果要在B表上引用A表的字段ID来创建一个外键,那么A表的ID上必须有主键(也就是说Id必须是A表的主码)
    这时,你看看你的A表上是不是由多个属性共同构成一个主码?如果是,那么你就要使ID变成A表的单独主码。
      

  3.   

    被引用的键在被引用表中必须是primary key。
      

  4.   

    1,client_id不是主键。
    2,你还没有指定 client_id外间关联哪个表的主键呢?
      

  5.   

    楼主对约束理解还不是很透彻,推荐看看9i的《DBA Fundamentals I》中关于约束的内容。
      

  6.   

    t_client 表中的字段client_id没有唯一约束或者不是主键