设计的例子自己找一个新的
实验目的
掌握数据库设计基本方法及数据库设计工具Power Designer。
实验内容和要求
掌握数据库设计基本步骤,包括数据库概念结构设计、逻辑结构设计,物理结构设计,数据库模式SQL语句生成。能够使用数据库设计工具进行数据库设计。
实验重点和难点
实验重点:概念结构设计、逻辑结构设计。
实验难点:逻辑结构设计。逻辑结构设计虽然可以按照一定的规则从概念结构转换来,但是由于概念结构通常比较抽象,较少考虑更多细节,因此转换而成的逻辑结构还需进一步调整和优化。逻辑结构承接概念结构和物理结构,处于核心地位,因而是数据库设计的重点。
实验过程及结果
因为老师没有给出实验用的信息,所以我在网上随便找了一个,如:设计一个教务信息系统的数据库(借用了工具Powerdesigner)
(学生只能查看自己相关的信息,这可以通过视图来实现,Sno==获取的登录学号,获取方法自己查,我懒得说了。)
非常简陋的如下6个实体:
④添加实体内容
然后我们根据现实情况,对每个实体添加属性,设置主码,部分约束(为什么说是部分呢,这里暂时只能设置非空和主码),数据类型:
M:勾选则不可为NULL
P:勾选则为主码,不可重复且不可为NULL
D:是否展示
Domian:域(在这里我就不设置了)
首先我自己试着画一画:
按照上图,我们在Powerdesigner中添加关系,以及设置关系种类。
全部建立完之后如下:
通过上面的E-R图,我们将其转化为关系模型
每个实体的属性、码如下:
①学生Student(Sno,Sname,Ssex,Sage,Class,Dno)
主码:Sno
注:一个学生只属于一个院系,1-n,给Student加入Dno
②教师Teacher(Tno,Tname,Tsex,Tage,Dno,Position)
主码:Tno
注:一个老师只属于一个院系,1-n,给Teacher加入Dno
③院系Department(Dno,Dname,Header)
主码:Dno
④课程Course(Cno,Cname,Hours,Credit,Type,Dno)
主码:Cno
注:一门课程只属于一个院系,1-n,给Course加入Dno
⑤课程安排Course_Arrange(Cno,Week,Ctime(节次),Cplace)
主码:Cno,Week,Ctime
注:一个课程有多个课程安排,1-n,给Course_Arrage加入Cno
⑥考试安排Exam_Arrange(Cno,Ewhen,Ehours,Eplace)
主码:Cno,Eplace
注:一个课程有多个考试安排,1-n,给Exam_Arrage加入Cno
⑦选修信息SC(Sno,Cno,Grade)
主码:Sno,Cno
注:一个学生可以选修多门课程,一门课程可以被多个学生选修
是一个n-m的关系,我们将Course表和Student表的码组合,转换成一个关系模式(这里还加了成绩Grade)
⑧任课信息TC(Tno,Cno,Term)
主码:Tno,Cno
注:一个老师可以教授多门课程,每门课程可以被多个老师教授
是一个n-m的关系,我们将Course表和Teacher表的码组合,转换成一个关系模式(这里还加了授课学期Term)
生成结果如下:
它很好地帮我们处理了1-n的关系——把1方的码加入n方的属性中,且作为外码(但并未设置为主码,我们可以手动去设置主码)
它也很好地帮我们处理了n-m的关系——把n方的码和m方的码均提出来,新建一个表,两方的码均作为主码,而且在这个表里面我们还可以按照我们前面所讲的需求去添加新的属性。
增加完如下所示:
它已经自动帮我们建立好了对外码、主码的索引,如下图
这里Course_Arrange_PK是(课程编号,周次,节次)的复合索引
have1_FK则是课程编号这个外码的单值索引(多个外码则建立多个)
因为我选择的数据库管理系统DBMS是MYSQL5.0,一般都是B+树索引
它也给我们写好了代码脚本
增加check检查(方法一),右键选择properties,再add,写SQL
但是失败了,因为我添加之后我在rules中没看到新的check约束
增加check检查(方法二)
直接在rules点击创建新的object,设置名字,设置为“约束”类型
右键编写约束内容,如下,我设置性别只能为男和女
可以在以下面板重新修改属性的一些限制
咱们还可以创建索引、触发器等:
但是我自己是觉得在这边创建没有在SQL Server里面来的方便。
所以在这里我们就不创建了。
点击并选择“自动生成数据库”
最终生成的MYSQL代码如下:
删除可能已存在的同名表格
显然,它加上了我们设置的约束条件
修改表格,加上外码约束,以及如果原表删除、更新了参照属性,我们设置成拒绝删除restrict
(标红是因为SQL Server不能用restrict)
记得最后去MYSQL里面跑一遍,看对不对,表的数目对不对。
我犯得错误:
遇到的问题和解决办法
1、Powerdesigner的下载需要下载破解包、汉化包
2、Powerdesigner的使用,功能很强大,但是刚开始接触用起来难
3、生成物理模型,会自动新建外码和创建新表,不要自己设置,导致不必要的重复。
4、自己创建check约束
实验总结
其实给定完整数据的数据库创建,我们在前面的两个实验中,已经比较充分地掌握了,但实验三是从现实生活出发,自己观察、总结、建模,也使用了一个新的工具Powerdesigner,这个工具比较强大,但是如果我们没有知识做铺垫,很容易搞错,无法很好地使用这个软件,总之学习之路漫漫其修远兮。