联合主键的其中一个属性如何做外键?

Falleyes 2014-12-03 11:44:51
数据库关系图如下:

现在要把Student表的ID和Running表的Student_ID联系起来。
但是建立外键的时候,要求把主键Student_ID和Recieve_Time一起做外键。
请问这个问题怎么解决?
...全文
880 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Falleyes 2014-12-04
  • 打赏
  • 举报
回复
引用 2 楼 reenjie 的回复:
樓主要求的把Student表的ID和Running表的Student_ID联系起来,可以採用下面的sql alter table Running add constraint fk_Running foreign key(Student_ID) references Student(ID)
非常感谢!
Falleyes 2014-12-04
  • 打赏
  • 举报
回复
引用 9 楼 Tiger_Zhao 的回复:
#2没错。 外键是主表用主键字段,没规定子表要用全部主键字段。 “要求把主键Student_ID和Recieve_Time一起做外键”这是数据库白痴才会说出来的话。
这个是我的错。受教了!
Falleyes 2014-12-04
  • 打赏
  • 举报
回复
引用 2 楼 reenjie 的回复:
樓主要求的把Student表的ID和Running表的Student_ID联系起来,可以採用下面的sql alter table Running add constraint fk_Running foreign key(Student_ID) references Student(ID)
嗯,这个是可以的,我已经使用数据测试过了。
Tiger_Zhao 2014-12-04
  • 打赏
  • 举报
回复
#2没错。
外键是主表用主键字段,没规定子表要用全部主键字段。
“要求把主键Student_ID和Recieve_Time一起做外键”这是数据库白痴才会说出来的话。
Falleyes 2014-12-04
  • 打赏
  • 举报
回复
引用 6 楼 reenjie 的回复:
引用 7 楼 ky_min 的回复:
这样建立外键,要求Running表中Student_ID是Unique,但是这是一个跑步记录表。因为有同一序号的学生,这个时间跑一次,另外一个时间跑一次,这个学生的Student_ID在表中就会出现很多次。所以Running表我才用Student_ID和Recieve_Time(接收到数据的时间)作为联合主键。 现在就是在Running插入记录的时候,会检查Student_ID是否在Student表中。试了这么多,只有别的非外键方法了?
还在加载中灬 2014-12-04
  • 打赏
  • 举报
回复
数据库关系图形界面设置~~ 不建议使用,可以慢慢习惯SQL操作 图形界面,外键表要选择Student表
引用
Running中的Student_ID是引用Student表中ID的,比如在Running插入数据的时候,Student_ID必须是Student表中存在的ID,这个怎么写约束?还是写插入触发器?
你上面设置成功了,这边不用管,会自动约束,这就是外键约束
reenjie 2014-12-04
  • 打赏
  • 举报
回复
引用 4 楼 Falleyes 的回复:
[quote=引用 3 楼 ky_min 的回复:] Student表的ID和Running表的Student_ID联系起来 应该是Running表引用Student表的ID作外键,你应该是设置错方向了 而Running表的复合主键如果要用作别的表的外键时,必须复合主键两个一起
啊,应该是我表述错了,我要建立的关系和你说的一样,Student是主表,Running是从表。 在我的Running表中,Recieve_Time是一个时间,没办法和Student_ID一起。 Running中的Student_ID是引用Student表中ID的,比如在Running插入数据的时候,Student_ID必须是Student表中存在的ID,这个怎么写约束?还是写插入触发器?[/quote] 建立主外鍵關係就OK,試一下下面的sql

alter table Running add constraint fk_Running foreign key(Student_ID) references Student(ID)
發糞塗牆 2014-12-04
  • 打赏
  • 举报
回复
外键需要唯一或者主键做引用,你这样单独挑一个列出来不合适
Falleyes 2014-12-04
  • 打赏
  • 举报
回复
引用 3 楼 ky_min 的回复:
Student表的ID和Running表的Student_ID联系起来 应该是Running表引用Student表的ID作外键,你应该是设置错方向了 而Running表的复合主键如果要用作别的表的外键时,必须复合主键两个一起
啊,应该是我表述错了,我要建立的关系和你说的一样,Student是主表,Running是从表。 在我的Running表中,Recieve_Time是一个时间,没办法和Student_ID一起。 Running中的Student_ID是引用Student表中ID的,比如在Running插入数据的时候,Student_ID必须是Student表中存在的ID,这个怎么写约束?还是写插入触发器?
还在加载中灬 2014-12-04
  • 打赏
  • 举报
回复
Student表的ID和Running表的Student_ID联系起来 应该是Running表引用Student表的ID作外键,你应该是设置错方向了 而Running表的复合主键如果要用作别的表的外键时,必须复合主键两个一起
reenjie 2014-12-04
  • 打赏
  • 举报
回复
樓主要求的把Student表的ID和Running表的Student_ID联系起来,可以採用下面的sql alter table Running add constraint fk_Running foreign key(Student_ID) references Student(ID)
reenjie 2014-12-04
  • 打赏
  • 举报
回复
alter table 表名 add constraint fk foreign key(字段1,字段2) references Running(Student_ID,Recieve_Time)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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