CREATE TABLE "学生信息"
               (
                "ID" CHAR(4),
                "姓名" CHAR(16),
                PRIMARY KEY ("ID")
               )  CREATE TABLE "课程信息"
               (
                "ID" CHAR(4),
                "课程分类" CHAR(4),
                "名称 "CHAR(16),
                "教师ID" CHAR(4),
                "教师姓名" CHAR(16),
                PRIMARY KEY ("ID")
               )  CREATE TABLE "成绩信息"
               (
                "学生ID" CHAR(4),
                "课程ID" CHAR(4),
                成绩 NUMERIC(5, 2),
                PRIMARY KEY("学生ID", "课程ID"),
                FOREIGN KEY("学生ID") REFERENCES "学生信息"("ID"),
                FOREIGN KEY("课程ID") REFERENCES "课程信息"("ID")-

解决方案 »

  1.   

    就我的理解,“考试次数”应该是指场次,而不是指期中、期末考试这种包含多个科目的考试,也就是说,期末考试考了语文和数学,这应该算两个“考试次数”而不是一个。所以tj_dns(愉快的登山者)的成绩表中的“课程编号”应该放在考试次数表里。
    tj_dns(愉快的登山者)指出了5个实体,和caiyunxia(monkey) 所说的班级,一共是6个实体,还应该进一步分析它们之间的关系。
    学生属于班级,班级属于学校,这可以包含在学生和班级表里。考试与课程的关系包含在考试次数表里。学生与考试的关系就是成绩,包含在成绩表里。而最麻烦的要算课程了,下面让我们看看课程与其它之间的关系。
    一个学校可以开设不同的课程,同一课程可以在多个学校开设,而不同学校的开设课程可以不同,也就是说是个多对多关系,这一关系无法包含学校表或课程表里的,必须用额外的表来描述这一关系。
    再看课程与学生的关系。学生学习某个课程通常是因班级而定的(必修),同时他又可以根据自己的爱好选择其它一些课程来学习(选修),而少数尖子学生可以不用修习某些必修课程(免修),所以还得有班级与课程关系表(必修表),学生与课程关系的选修表和免修表。
    另外,你是否需要考虑补考和期评这些成绩。
      

  2.   

    必修和选修这些先不用考虑了。一个学校所需要的科目现在已经定下来了。只是比如高中和小学的课程安排不一样。所以说高中小学和初中的格式是已经定好的。libi(风自吟)说的对,学校开设的课程不同,同一课程可以在多个学校开设,所以我就是因为处理不好这个多对多的关系才感到苦恼,不知道你有什么好的想法?
      

  3.   

    你的问题只是没有分析实体之间的关系,分析出这个关系后,应该不难解决呀。
    我给你这么说吧,两个实体A和B以及它们之间的关系R,如何描述这些信息。
    1、一一对应关系:只需两张表Ta和Tb,然后在Ta中加一字段Pb(即B的主键)即可,或者在Tb中加Pa;
    2、一对多:还是两张表Ta和Tb,然后在Tb中加Pa;
    3、多对多:三张表Ta、Tb和Tr,Tr就两个字段Pa和Pb。
    上面的Ta和Tb分别是实体A和B的信息表,使用这样的表就足以描述两个实体A和B以及它们之间的关系R,至于如何“解释”这个关系,那是程序的事情。你这里问题还不只是用多少张表来描述学校和课程的实体关系,关键的是在这个关系R中还存在函数依赖,如何将它找出,并模式分解,以设计出最优的数据表格。
    “所以说高中小学和初中的格式是已经定好的”,从这段叙述中我们可以知道,课程依赖于年级,而年级又多值依赖于学校,所以就要把学校与课程的关系分解为学校与年级和年级与课程的关系,这样就减少了数据冗余。这两个都是多对多关系,都得用额外的表来描述。这样设计出来的数据库查找效率很可能不高,可以根据需要进行优化。