如果一个主键是多个字段构成,
比如老师带学生,学生不会重复
teacherid studentid ...
这样的话,主键可以用这两个字段构成,如果还有第几期的概念的话,可能还要三个字段构成。这样和这个表关联的其他表,字段就非常多了,比如成绩表,teacherid studentid type score。使用起来很不方便,每次传递参数的时候都要一大串。但如果用id来表示主键的话,是不是又不符合范式了呢?
id teacherid studentid ...
id type scoreid 和teacherid studentid 代表同一个东西了。为了防止teacherid studentid 重复,还要建立唯一索引了

解决方案 »

  1.   

    学期,teacherid, studentid 3个字段做主键就OK
      

  2.   

    你可以让那3个字段做联合主键,加个id做标识,其他表用这个表的id,但不建立外键。
      

  3.   

    你这个ID是代理键.据说这个东东的存在是比较有争议的.
    唯一索引还是要建立的.
    如楼上所说,没啥范式不范式的,对于OLTP来说,重要的是高效,方便.
      

  4.   

    恩,这种情况一般都是将表拆分开来,如:teacher表 student表,这样teacherid studentid 就便于设为主键
      

  5.   


    teacher表 student表是存放基础信息的吧,现在是选课表
    teacherid studentid 作为选课表的主键然后又有成绩表
    这时选课表的teacherid studentid 和课程又一起组成主键。如果成绩表还分单项成绩,选择题几分,填空题几分,还要加一个表,他的主键变成 
    teacherid studentid  课程 题目类型这样主键不是越来越长了么?
      

  6.   


    我同意9楼的~最好不要设置外键 外键在业务中处理就OK了
    我看了金蝶K/3系统 基本是不设外键的~因为表很多的时候设外键 操作起来会很头痛