我设置了个学生表 成绩表 课程表
但是这样成绩表中有cid sid两个主键
但是了解到 将业务逻辑主键引入库表,以后业务逻辑的变化,将很可能对底层数据库结构产生连带影响。
复合主键的引入,很大程度上意味着业务逻辑已经侵入到数据存储逻辑之中。
求指导
------解决方案--------------------
做程序的最终目的是解决实际问题,数据库中的数据和业务本就是一体的
这个表就算你不用复合主键,单独建立主键,这两个字段同样也会以外键的形式存在
这种现象本身就是再正常不过的事了,没啥好纠结的
------解决方案--------------------
可以做为复合主键.
也可以做为外键,不过外键是要分开来的,也就是cis做外键对应course的cid,sid做外键对应student的sid,分开两个外键
------解决方案--------------------
但是这样成绩表中有cid sid两个主键
准确的说法应该是:成绩表的 PK 包括 cid , sid 这两列;
在 m:n 的关系表中,这个属于正常现象。
业务发生变化,这个要看变化多大,如果只是增加一些属性,比如:一个学生第一次没有考到 60 分,又被要求重修,肯定会在这张表中再增加一行,这时就要增加另一张表来记录考试信息,再到成绩表增加一列,来标识是哪次考试,相当于PK成三列了。
这些改动大的需求,应该在下个版本中完善,不能想加就加,不然你的程序没法写了。
------解决方案--------------------
可以。只是你新加一个 id , 这样就不能保证sid 和 cid 一样了,还是建议再加一个 UNIQUE INDEX ,至少包括 sid 和 cid 这两列;