数据库设计 联合主键设为外键的问题
2013-11-25 11:05
459 查看
很多时候我们在数据库设计中都会遇到这样的问题:
有两个表 ,例如(红色的是主键)
学生(学号,姓名,性别,专业号,班级号)
student(sno,sname,sex,spno,class_no);
专业(专业号,专业名称,上课学时);
department(spno,sname,semester);
班级:(专业号,班级号,班主任);
class(spno,class_no,header);
这个时候,我们想把student表里面的class_no设为外键,references class表,这个时候应该怎么做呢?
我一开始的做法是:
alter table student
add constraint fr_student foreign key(class_no) references class(class_no);
会出现什么问题呢?
消息 1776,级别 16,状态 0,第 1 行
在被引用表 'class' 中没有与外键 'fr_student' 中的引用列列表匹配的主键或候选键。
消息 1750,级别 16,状态 0,第 1 行
无法创建约束。请参阅前面的错误消息。
会报错!
为什么呢?
这个时候我们就好好好理解一下定义了!
什么是外码,外码设置有什么条件?
其中有一点很重要的就是:外码必须是另外一个表的主码!
这里,我们的student表中的class_no如果想要设计成为一个外码,我们首先要找一下,它是哪一个表的主码?
class表?
class表中的主码是(spno,class_no);这个才是class的主码,是联合主键!
所以,如果你设置联合主键,那么外键必须同时引用两个主键属性,否则只能用check约束来实现参照关系。
所以,一般这个时候你可以回去看看语意有没有理解错误,我的一开始就是因为语意理解错误了,才会出这种情况,我的student表中的(spno,class_no)应该设置成为外键才对。
写的不好的可以告诉我一下,让我修改一下
有两个表 ,例如(红色的是主键)
学生(学号,姓名,性别,专业号,班级号)
student(sno,sname,sex,spno,class_no);
专业(专业号,专业名称,上课学时);
department(spno,sname,semester);
班级:(专业号,班级号,班主任);
class(spno,class_no,header);
这个时候,我们想把student表里面的class_no设为外键,references class表,这个时候应该怎么做呢?
我一开始的做法是:
alter table student
add constraint fr_student foreign key(class_no) references class(class_no);
会出现什么问题呢?
消息 1776,级别 16,状态 0,第 1 行
在被引用表 'class' 中没有与外键 'fr_student' 中的引用列列表匹配的主键或候选键。
消息 1750,级别 16,状态 0,第 1 行
无法创建约束。请参阅前面的错误消息。
会报错!
为什么呢?
这个时候我们就好好好理解一下定义了!
什么是外码,外码设置有什么条件?
其中有一点很重要的就是:外码必须是另外一个表的主码!
这里,我们的student表中的class_no如果想要设计成为一个外码,我们首先要找一下,它是哪一个表的主码?
class表?
class表中的主码是(spno,class_no);这个才是class的主码,是联合主键!
所以,如果你设置联合主键,那么外键必须同时引用两个主键属性,否则只能用check约束来实现参照关系。
所以,一般这个时候你可以回去看看语意有没有理解错误,我的一开始就是因为语意理解错误了,才会出这种情况,我的student表中的(spno,class_no)应该设置成为外键才对。
写的不好的可以告诉我一下,让我修改一下
相关文章推荐
- 数据库中主键和外键的设计原则
- PowerDesigner中的CDM设计的外键作主键的问题
- 数据库中主键和外键的设计原则
- 数据库中主键和外键的设计原则
- 数据库中主键和外键的设计原则[转]
- SQL 数据库 学习 014 外键的具体定义 设计外键要注意的问题
- 数据库中主键和外键的设计原则(转)
- 数据库设计中是设计联合主键还是唯一索引+单一主键好?
- 数据库中主键和外键的设计原则 (转贴)
- 数据库中主键和外键的设计原则
- 数据库联合外键做主键(解决多对多关系)
- 关于数据库设计中主键问题的思考
- 关于数据库设计中主键问题的思考
- 【数据库设计】关系型数据库 超键 候选键 主键 外键的区别
- 数据库中主键和外键的设计原则
- 数据库中主键和外键的设计原则
- 数据库学习--基于postgreSQL的数据库设计与主键 外键
- 数据库中主键和外键的设计原则/数据库事务的四种特性oracle
- 从一个审批需求看数据库设计——联合主键的使用
- SQL 中联合主键设为外键的问题