1、主键、外键与组合键主键、外键与组合键关系运算符关系运算符实体与实体间的关系实体与实体间的关系设有一个学生设有一个学生-课程数据库,包括学生关系课程数据库,包括学生关系Student、课程课程关系关系Course和选修关系和选修关系SC。StudentStuIDStuNameStuAgeStuSexDepName12001mary21女IS12002tom20男Math12003jack19男English12004nancy22女ISCourseIDCourseNameCredit1Computer22math33English3CourseSCStuIDCourseIDGrade120011
2、901200129212001395120021801200327612004382查询至少选修查询至少选修1号课程和号课程和3号课程的学生号码号课程的学生号码 首先建立一个临时关系首先建立一个临时关系K:CourseID13StuID,CourseID(SC)K查询选修了查询选修了2号课程的学生的学号号课程的学生的学号StuID(CousreID=2(SC)12001,12003查询选修了全部课程的学生号码和姓名。查询选修了全部课程的学生号码和姓名。StuID,CourseID(SC)CourseID(Course)StuID,StuName(Student)第一章第一章数据库基础数据库基础
3、-3E-R模型模型画画E-R图图转换转换E-R图为数据库中的表图为数据库中的表(1)一个遵循一个遵循E-R图的数据库在关系系统里可以表示为一组图的数据库在关系系统里可以表示为一组表。表。(2)常规实体是构成数据库的最基本的元素。常规实体是构成数据库的最基本的元素。(3)每个常规实体都对应于一张表。每个常规实体都对应于一张表。(4)属性对应表中的列属性对应表中的列(5)关系的每一种类型都关系的每一种类型都以不同的方式以不同的方式映射为关系数据库管映射为关系数据库管理系统里的表。理系统里的表。(6)表是用来存储和检索现实世界里的信息的,因此要以最表是用来存储和检索现实世界里的信息的,因此要以最优的
4、方式来创建它们,最重要的原则是应使用优的方式来创建它们,最重要的原则是应使用尽量少的尽量少的表及属性来描述现实世界表及属性来描述现实世界。假设一个学生只能完成一个项目,并且一个项目也只能由一个假设一个学生只能完成一个项目,并且一个项目也只能由一个学生完成。请画出学生完成。请画出E-R图。学生实体有属性学号,姓名,住址。图。学生实体有属性学号,姓名,住址。项目实体有属性项目号,项目名称。项目实体有属性项目号,项目名称。StudentProjectDoesStuIDStuNameStuAddressProjIDProjName一对一转换规则:一对一转换规则:每个实体对应一张表,选中其中任意一个实体
5、为其添加外键,该外键来每个实体对应一张表,选中其中任意一个实体为其添加外键,该外键来自于另一实体的主键。自于另一实体的主键。11StudentProjectDoesStuIDStuNameStuAddressProjIDProjNameStudent(StuID,StuName,StuAddress,ProjID)Project(ProjID,ProjName)11一个系只能对应一个系主任,一个系主任也只能在一个系一个系只能对应一个系主任,一个系主任也只能在一个系工作。请画出工作。请画出E-R图,并转换成表。系有属性系号,系名,图,并转换成表。系有属性系号,系名,系主任有员工号和员工名。系主任
6、有员工号和员工名。StudentDepartmentDoesStuIDStuNameStuAddressDepIDDepNamem1假设一个系可以有多名学生,而一名学生只能在一个系学习。假设一个系可以有多名学生,而一名学生只能在一个系学习。请画出请画出E-R图。学生实体有属性学号,姓名,住址。系实体有属图。学生实体有属性学号,姓名,住址。系实体有属性系号,系名称。性系号,系名称。一对多转换规则:一对多转换规则:每个实体对应一张表,其中每个实体对应一张表,其中“多多”对应的实体转换的表添加一个外键,对应的实体转换的表添加一个外键,这个外键来自于这个外键来自于“一一”对应实体的主键。对应实体的主键
7、。StudentDepartmentHasStuIDStuNameStuAddressDepIDDepNamem1Department(DepID,DepName)Student(StuID,StuName,StuAddress,DepID)一个宿舍能容纳多名学生,一个学生只能住宿在一个宿舍。一个宿舍能容纳多名学生,一个学生只能住宿在一个宿舍。请画出请画出E-R图,并转换成表。学生实体有属性学号,姓名,图,并转换成表。学生实体有属性学号,姓名,宿舍实体有宿舍号,容量。宿舍实体有宿舍号,容量。假设一个学生可以选修多门课程,一门课程也可以由多个学生选假设一个学生可以选修多门课程,一门课程也可以由多
8、个学生选修。请画出修。请画出E-R图,并转换成表。图,并转换成表。学生实体有属性学号,姓名,学生实体有属性学号,姓名,住址。课程实体有课程号,课程名,学分。住址。课程实体有课程号,课程名,学分。StudentCoursechooseStuIDStuNameStuAddressCourseIDCourseNamemnCredit多对多转换规则:多对多转换规则:每个实体对应一张表,其中每个实体对应一张表,其中“关系关系”也对应一张表,也对应一张表,“关系关系”对应的表对应的表中选择两个实体的主键组合作为中选择两个实体的主键组合作为“关系关系”表中的主键。表中的主键。GradeStudentCour
9、sechooseStuIDStuNameStuAddressCourseIDCourseNamemnCreditStudent(StuID,StuName,StuAddress)Course(CourseID,CourseName,Credit)SC(StuID,CourseID,Grade)Grade一个学生可以借阅多本书,一本书也可以由多个学生来借阅。请画一个学生可以借阅多本书,一本书也可以由多个学生来借阅。请画出出E-R图,并转换成表。图,并转换成表。学生实体有属性学号,姓名,住址,书实学生实体有属性学号,姓名,住址,书实体的属性有书号,书名,价格。体的属性有书号,书名,价格。每个员工都
10、有子女,如果员工不存在了,则数据库没有必要每个员工都有子女,如果员工不存在了,则数据库没有必要保存其子女的信息,子女实体是弱实体。弱实体使用双矩形保存其子女的信息,子女实体是弱实体。弱实体使用双矩形框表示,请画出框表示,请画出E-R图,并转换成表。图,并转换成表。EmployeeEmpNameEmpIDChildChildNameChildAge转换规则:转换规则:每个实体对应一张表,其中常规实体的主键成为弱实体的外键,同时这每个实体对应一张表,其中常规实体的主键成为弱实体的外键,同时这个外键也是弱实体的主键或主键的一部分。个外键也是弱实体的主键或主键的一部分。EmployeeEmpNameE
11、mpIDChildChildNameChildAgeEmployee(EmpID,EmpName)Child(EmpID,ChildName,ChildAge)员工实体有属性员工号,姓名,住址,员工又分为小时工和全职员工实体有属性员工号,姓名,住址,员工又分为小时工和全职员工,小时工有属性工作时间及小时工资,而全职员工属性有基员工,小时工有属性工作时间及小时工资,而全职员工属性有基本工资和奖金,请画出本工资和奖金,请画出E-R图并转换成表。超类与子类间用图并转换成表。超类与子类间用“十十”字相连。字相连。EmployeeEmpNameEmpIDEmpAddrHourlyEmployeeSala
12、riedEmployeeHoursWagesSalaryBonusEmployeeEmpNameEmpIDEmpAddrHourlyEmployeeSalariedEmployeeHoursWagesSalaryBonus转换规则:转换规则:每个实体对应一张表,每个子实体引入父实体的主键为自己的外键,同每个实体对应一张表,每个子实体引入父实体的主键为自己的外键,同时这个外键又是子实体的主键。时这个外键又是子实体的主键。Employee(EmpID,EmpName,EmpAddr)HourlyEmployee(EmpID,Wages,Hours)SalariedEmployee(EmpID,Sa
13、lary,Bonus)Animal实体有属性实体有属性AniID,AniName,Weight,Animal子子类有类有Fish,属性为,属性为Swim、子类、子类Reptile,属性,属性crawl及子及子类类Carnivore,属性,属性Eat_meat请画出请画出E-R图,并转换成表。图,并转换成表。(1)在数据库设计过程中,有些属性本身又进一步需要一些属性来在数据库设计过程中,有些属性本身又进一步需要一些属性来自我界定,这样这些属性就变成了实体。其中自我界定,这样这些属性就变成了实体。其中EmpAddr需要描述国需要描述国家,城市,社区,街道等信息。家,城市,社区,街道等信息。Empl
14、oyeeEmpNameEmpIDEmpAddrEmpNameEmpIDEmployeeSituatedEmpAddrCountryCityBlockStreet(2)如果有两个实体属性完全相同,则将两个实体合并。如果有两个实体属性完全相同,则将两个实体合并。PriceCodeNameStoryBookPriceCodeNameTextBookPriceCodeNameBook(3)通过抽取高层实体集的子集来组成低层实体集通过抽取高层实体集的子集来组成低层实体集,称为特化。称为特化。WeightAniIDAniNameAnimalSwimCrawlEat_meatAnimalWeightAniN
15、ameFishCarnivoreSwimEat_meatAniIDReptileCrawl(4)与特化相反,两个或多个实体有一些共有属性,我们建立与特化相反,两个或多个实体有一些共有属性,我们建立一个新的超类来简化引用,称为泛化。一个新的超类来简化引用,称为泛化。WeightAniIDAniNameFishSwimAnimalWeightAniNameFishCarnivoreSwimEat_meatAniIDReptileCrawlWeightAniIDAniNameReptileCrawl(1)有实体有实体Student,Department,Book,Course,根据对学校管理的理解,
16、请画出根据对学校管理的理解,请画出E-R图及分解成表。图及分解成表。(2)假设系统中添加了假设系统中添加了Teacher和和Staff实体,表示一个实体,表示一个教师可以教授多门课程,一门课程也可以由多个教师教授,教师可以教授多门课程,一门课程也可以由多个教师教授,如何画如何画E-R图及分解成表。图及分解成表。Student(StuID,StuName)Department(DepID,DepName)Book(BookID,BookName)Course(CourseID,CourseName)Staff(StaffID,StaffName)Teacher(Title)考虑某个考虑某个IT公
17、司的数据库信息:公司的数据库信息:1.部门具有部门具有DepID和和DepName。2.部门员工有部门员工有EmpID,EmpName。员工只在一个部门工作。员工只在一个部门工作。3.实习生有实习生有TrainID,TrainName。实习生只在一个部。实习生只在一个部门实习。门实习。4.项目有项目有ProjID,ProjName,StartTime,EndTime。5.一名员工可参与多个项目,一个项目也可由多个员工参一名员工可参与多个项目,一个项目也可由多个员工参与。不同员工参与相同项目花费时间不同。与。不同员工参与相同项目花费时间不同。6.每个实习生只能参与一个项目,一个项目可由多名实习每个实习生只能参与一个项目,一个项目可由多名实习生参与。生参与。Department(DepID,DepName)Employee(EmpID,EmpName,DepID)Project(ProjID,ProjName,StartTime,EndTime)EP(EmpID,ProjID,Hours)Trainee(TrainID,TrainName,DepID,ProjID)E-R图转换为表的规则图转换为表的规则