1、要建立关于系、学生、班级、研究会等信息的一个关系数据库。规定:一个系有若干专业、每个专业每年只招一个班,每个班有若干学生,一个系的学生住在同一个宿舍区,一个系只有一个系名,一个系名也只给一个系用。每个学生可参加若干研究会,每个研究会有若干学生。
描述学生的属性有:学号、姓名、出生年月、系名、班号、宿舍区。
描述班级的属性有:班号、专业名、系名、人数、入校年份。
描述系的属性有:系号、系名、系办公室地点、人数。
描述研究会的属性有:研究会名、成立年份、地点、人数。
学生参加某研究会,有一个入会年份。
试给出上述数据库的关系模式;写出每个关系的最小依赖集(即基本的函数依赖集,不是导出的函数依赖);指出是否存在传递函数依赖;对于函数依赖左部是多属性的情况,讨论其函数依赖是完全函数依赖还是部分函数依赖,指出各关系的候选键、外部关系键。(课本P176)
参考答案:
关系模式:
学生(学号,姓名,出生年月,系名,班号,宿舍区)
班级(班号,专业名,系名,人数,入校年份)
系(系号,系名,系办公室地点,人数)
研究会(研究会名,成立年份,地点,人数)
入会(学号,研究会名,入会年份)
关系的最小函数依赖集:
学生:{学号→姓名,学号→出生年月,学号→班号,班号→系名,系名→宿舍区}
候选键:学号;外键:班号,系名
不存在部分函数依赖,但存在传递函数依赖:学号→系名,所以该关系最高属于2NF 。
班级:{班号→专业名,专业名→系名,班号→人数,班号→入校年份,{专业名,入校年份}→班号} 候选键:班号,{专业名,入校年份};外键:系名
存在部分函数依赖:班号→系名,所以该关系最高属于1NF 。
系:{系号→系名,系号→系办公室地点,系号→人数}
候选键:系号;外键:无
不存在部分函数依赖,也不存在传递函数依赖,所以该关系最高属于3NF 。
研究会:{研究会名→成立年份,研究会名→地点,研究会名→人数}
候选键:研究会名;外键:无
不存在部分函数依赖,也不存在传递函数依赖,所以该关系最高属于3NF 。
入会:{{学号,研究会名}→入会年份}
候选键:{学号,研究会名};外键:学号
不存在部分函数依赖,也不存在传递函数依赖,所以该关系最高属于3NF 。
(注:对于本数据库可以设计更为合理的关系模式,如下所示)
学生(学号,姓名,出生年月,班号)
班级(班号,专业名,系名,人数,入校年份)
系(系号,系名,系办公室地点,人数,宿舍区)
研究会(研究会名,成立年份,地点,人数)
入会(学号,研究会名,入会年份)
(以下是SQL3练习中的一部分)
2、
1).设有关系模式R (工程号P#,材料号I#,数量QUAN ,开工日期DATE_BEGIN,完工日期DATE_FINISH,价格PRICE )
函数依赖F={{P#,I#}→QUAN ,P#→DATE_BEGIN,P#→DATE_FINISH,I#→PRICE}
答案:R 是1NF 。
∵R 的候选关键字为{ P#,I# },则QUAN, DATE_BEGIN,DATE_FINISH,PRICE 为非主属性,又由于I#→PRICE, 因此F 中存在非主属性对候选关键字的部分函数依赖。
2).设有关系模式R (职工号E#,职工名ENAME ,年龄AGE ,性别SEX ,单位号D#,单位名DNAME ) 答案:R 是2NF 。
∵函数依赖F={ E#→ENAME, E#→AGE, E#→SEX , E#→D#, D#→DNAME}
R 的候选关键字为{E#},则ENAME ,AGE,SEX, D#,DNAME 为非主属性,
又由于D#→DNAME ,因此F 中存在非主属性对候选关键字的传递函数依赖。
1、要建立关于系、学生、班级、研究会等信息的一个关系数据库。规定:一个系有若干专业、每个专业每年只招一个班,每个班有若干学生,一个系的学生住在同一个宿舍区,一个系只有一个系名,一个系名也只给一个系用。每个学生可参加若干研究会,每个研究会有若干学生。
描述学生的属性有:学号、姓名、出生年月、系名、班号、宿舍区。
描述班级的属性有:班号、专业名、系名、人数、入校年份。
描述系的属性有:系号、系名、系办公室地点、人数。
描述研究会的属性有:研究会名、成立年份、地点、人数。
学生参加某研究会,有一个入会年份。
试给出上述数据库的关系模式;写出每个关系的最小依赖集(即基本的函数依赖集,不是导出的函数依赖);指出是否存在传递函数依赖;对于函数依赖左部是多属性的情况,讨论其函数依赖是完全函数依赖还是部分函数依赖,指出各关系的候选键、外部关系键。(课本P176)
参考答案:
关系模式:
学生(学号,姓名,出生年月,系名,班号,宿舍区)
班级(班号,专业名,系名,人数,入校年份)
系(系号,系名,系办公室地点,人数)
研究会(研究会名,成立年份,地点,人数)
入会(学号,研究会名,入会年份)
关系的最小函数依赖集:
学生:{学号→姓名,学号→出生年月,学号→班号,班号→系名,系名→宿舍区}
候选键:学号;外键:班号,系名
不存在部分函数依赖,但存在传递函数依赖:学号→系名,所以该关系最高属于2NF 。
班级:{班号→专业名,专业名→系名,班号→人数,班号→入校年份,{专业名,入校年份}→班号} 候选键:班号,{专业名,入校年份};外键:系名
存在部分函数依赖:班号→系名,所以该关系最高属于1NF 。
系:{系号→系名,系号→系办公室地点,系号→人数}
候选键:系号;外键:无
不存在部分函数依赖,也不存在传递函数依赖,所以该关系最高属于3NF 。
研究会:{研究会名→成立年份,研究会名→地点,研究会名→人数}
候选键:研究会名;外键:无
不存在部分函数依赖,也不存在传递函数依赖,所以该关系最高属于3NF 。
入会:{{学号,研究会名}→入会年份}
候选键:{学号,研究会名};外键:学号
不存在部分函数依赖,也不存在传递函数依赖,所以该关系最高属于3NF 。
(注:对于本数据库可以设计更为合理的关系模式,如下所示)
学生(学号,姓名,出生年月,班号)
班级(班号,专业名,系名,人数,入校年份)
系(系号,系名,系办公室地点,人数,宿舍区)
研究会(研究会名,成立年份,地点,人数)
入会(学号,研究会名,入会年份)
(以下是SQL3练习中的一部分)
2、
1).设有关系模式R (工程号P#,材料号I#,数量QUAN ,开工日期DATE_BEGIN,完工日期DATE_FINISH,价格PRICE )
函数依赖F={{P#,I#}→QUAN ,P#→DATE_BEGIN,P#→DATE_FINISH,I#→PRICE}
答案:R 是1NF 。
∵R 的候选关键字为{ P#,I# },则QUAN, DATE_BEGIN,DATE_FINISH,PRICE 为非主属性,又由于I#→PRICE, 因此F 中存在非主属性对候选关键字的部分函数依赖。
2).设有关系模式R (职工号E#,职工名ENAME ,年龄AGE ,性别SEX ,单位号D#,单位名DNAME ) 答案:R 是2NF 。
∵函数依赖F={ E#→ENAME, E#→AGE, E#→SEX , E#→D#, D#→DNAME}
R 的候选关键字为{E#},则ENAME ,AGE,SEX, D#,DNAME 为非主属性,
又由于D#→DNAME ,因此F 中存在非主属性对候选关键字的传递函数依赖。