当前位置: 代码迷 >> Oracle开发 >> 学生成绩管理系统怎么设置表,及表间关系
  详细解决方案

学生成绩管理系统怎么设置表,及表间关系

热度:111   发布时间:2016-04-24 06:38:25.0
学生成绩管理系统如何设置表,及表间关系啊
我设置了个学生表 成绩表 课程表 
但是这样成绩表中有cid sid两个主键 
但是了解到 将业务逻辑主键引入库表,以后业务逻辑的变化,将很可能对底层数据库结构产生连带影响。
复合主键的引入,很大程度上意味着业务逻辑已经侵入到数据存储逻辑之中。
求指导
------解决方案--------------------
做程序的最终目的是解决实际问题,数据库中的数据和业务本就是一体的
这个表就算你不用复合主键,单独建立主键,这两个字段同样也会以外键的形式存在

这种现象本身就是再正常不过的事了,没啥好纠结的
------解决方案--------------------
引用:
Quote: 引用:

做程序的最终目的是解决实际问题,数据库中的数据和业务本就是一体的
这个表就算你不用复合主键,单独建立主键,这两个字段同样也会以外键的形式存在

这种现象本身就是再正常不过的事了,没啥好纠结的
成绩表里的cid sid是作为复合主键还是作为外键呢

可以做为复合主键.
也可以做为外键,不过外键是要分开来的,也就是cis做外键对应course的cid,sid做外键对应student的sid,分开两个外键
------解决方案--------------------
但是这样成绩表中有cid sid两个主键 

准确的说法应该是:成绩表的 PK 包括 cid , sid 这两列;

在 m:n 的关系表中,这个属于正常现象。

业务发生变化,这个要看变化多大,如果只是增加一些属性,比如:一个学生第一次没有考到 60 分,又被要求重修,肯定会在这张表中再增加一行,这时就要增加另一张表来记录考试信息,再到成绩表增加一列,来标识是哪次考试,相当于PK成三列了。

这些改动大的需求,应该在下个版本中完善,不能想加就加,不然你的程序没法写了。
------解决方案--------------------
可以。只是你新加一个 id , 这样就不能保证sid 和 cid 一样了,还是建议再加一个 UNIQUE INDEX ,至少包括 sid 和 cid 这两列;
  相关解决方案