关于外键约束问题

whhitli 2009-06-21 07:33:35
create table Course(Id char(8),Num int,
Room_Num char(10), week char(10), Time int,
primary key (Id, Num));
上面是新建的Course表,Id是课程号,Num是课序号;

我想在下面的表中设置外键约束,Course_Id是参照Course的Id的一个约束关系
create table Course_Limited(Course_Id char(8),
Limited_Grade char(5), Limited_Num int, Limited_Major char(20),
Credit float, Name char(20),
primary key (Course_Id));

各位给帮帮忙!!
...全文
35 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
whhitli 2009-06-22
  • 打赏
  • 举报
回复
就算是Course中的Id会有重复的,应该不会影响吧,外键不就是为了确保 Course_Limited 表中的属性Course_Id
必须是Couese中的Id的范围之内吗??Id重复应该不会影响吧!!
不知道我对外键的理解对否!!
whhitli 2009-06-22
  • 打赏
  • 举报
回复
alter table A add constraints FK_test foreign key(Id) references test(Id);
如上:我有个疑问,外键说简单点就是为了使A中的主键Id出现的必须是test中Id出现的,对吧!
要是不对,谁帮忙解释给我一下!!!



但是我提问就是Course中有两个属性作为主键,当我要做这个时:
alter table Course_Limited add constraints FK_Course_Limited2Course_ID foreign key(Course_Id) references Course(id);


出现以下提示:

第 1 行出现错误:
ORA-02270: 此列列表的唯一或主键不匹配

这是为什么??
就算是Course中的Id会有重复的,应该不会影响吧!!
谁来解释一下,
pathuang68 2009-06-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 welyngj 的回复:]
要建立外键约束的话,被引用的表的列一定要是那张表的primary key or unique key.
Course表的Id虽然和num构成了联合primary key,但是id列不是primary key,id列可能会发生重复。

所以肯定是建不成外键的。
[/Quote]
应该一个表的主键才有可能被另外一个表的外键reference吧?unique key应该不可以。
csuxp2008 2009-06-22
  • 打赏
  • 举报
回复
alter table Course_Limited add constraints FK_Course_Limited2Course_ID foreign key(Course_Id) references Course(id);

course表的(id)必须是primary key或者是unique key。

===============================================…
[/Quote]


6楼正解,在表course_limited中添加一个外键约束就OK了,不过这个约束名也太长了
inthirties 2009-06-22
  • 打赏
  • 举报
回复
create table Course_Limited(Course_Id char(8),
Limited_Grade char(5), Limited_Num int, Limited_Major char(20),
Credit float, Name char(20),
primary key (Course_Id));

alter table Course_Limited add constraints FK_Course_Limited2Course_ID foreign key(Course_Id) references Course(id);

course表的(id)必须是primary key或者是unique key。

==================================================================
Inthirties关注Oracle数据库 维护 优化,安全,备份,恢复,迁移,故障处理

如果你需要帮助或想和我一起学习的请联系
联系方式QQ:370140387
电子邮件:dba@Inthirties.com
网站: http://www.inthirties.com

ACMAIN_CHM 2009-06-22
  • 打赏
  • 举报
回复

unique key 可以。
whhitli 2009-06-22
  • 打赏
  • 举报
回复
谢谢,知道了!
作为外键的references必须是primary key或者是unique key。

不胜感激!!
inthirties 2009-06-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 csuxp2008 的回复:]
alter table Course_Limited add constraints FK_Course_Limited2Course_ID foreign key(Course_Id) references Course(id);

course表的(id)必须是primary key或者是unique key。

===============================================…
[/Quote]


6楼正解,在表course_limited中添加一个外键约束就OK了,不过这个约束名也太长了
[/Quote]

作为外键的references必须是primary key或者是unique key。
csuxp2008 2009-06-22
  • 打赏
  • 举报
回复
course表中的主键是id和num 那么id确实可能存在重复,那样的话id就不能作为外键了
hyhymn 2009-06-21
  • 打赏
  • 举报
回复
如果Course表里id惟一的话

create table Course_Limited(
Course_Id char(8),
Limited_Grade char(5), Limited_Num int, Limited_Major char(20),
Credit float, Name char(20),
primary key (Course_Id),
foreign key (Course_Id) references Course(id)
);
welyngj 2009-06-21
  • 打赏
  • 举报
回复
要建立外键约束的话,被引用的表的列一定要是那张表的primary key or unique key.
Course表的Id虽然和num构成了联合primary key,但是id列不是primary key,id列可能会发生重复。

所以肯定是建不成外键的。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧