任务6创建数据模型分析过程

教务管理系统建模分析过程

2010-2011学年第2学期学习成绩的属性名词有:学号、姓名、学院名、专业、班级、学年
、学期、课程代码、课程名称、课程性质、课程归属、学分、绩点、开课学院、备注。

A:学号、姓名、学院(多值属性)、班级(多值属性)、专业(多值属性);
B:课程代码、课程名称、课程性质(多值属性)、课程归属(多值属性)、学年(多值属性)、学分(多值属性,函数依赖)、绩点(多值属性,函数依赖)、开课学院(多值属性)、备注;

软件测试专业课程设置的属性名词有:课程类别、课程性质、序号、课程代码、课程名称、核心课程(多值属性)、课程类型(多值属性)、学分(多值属性,函数依赖)、总学时(函数依赖)、理论、实践

  1. 标识实体类:学生、院系、专业、班级、课程、选课、课程类别、教师
    提示:在标识实体类时,一种方法是在用户的需求说明中寻找名词。
  2. 标识实体间的关系:
    一个学生至多选择一个专业,一个专业至多被一个学生选择。学生—>专业,1:1
    一个院系至少选择一个专业,一个专业至多被一个院系选择。院系—>专业,1:多
    一个学生至多选择一个班级,一个班级对应多个学生。学生—>班级,多:1
    一个专业可以设置多个不相同课程,课程可以被多个不同专业选择。
    专业<—>课程,多:多。
    一个学生除了修读本专业规定的课程之外,还应该修读其它的(选修)课程,一个学生可以选择多个不相同课程,同一课程可以不选择或选择不同需求的学生。
    学生<—>课程,多:多。
    一个老师至少任一门课程,一门课程对应多个不同的任课老师。
    老师<—>课程,多:多。

提示:在标识实体类之间关系时,另一种方法是在用户的需求说明中找动词或动词短语。

标识实体的属性:
学校:学校编号、学校名称
学院:系部编号、系部名、学校编号
班级:班级编号、班级名称、系部编号
学生:学号、姓名、班级编号

专业:专业编号(代码)、专业名称、系部编号

教师:教师编号、姓名、联系电话

教师<—>课程:(教师编号、课程编号)、课程名

学生<—>课程(选课):(学号、课程编号)、成绩

专业<—>课程:(专业编号、课程编号)

课程:课程编号、课程名称、学分、开课学年、开课学期、理论学时、实践学时、备注、课程类别

对多值属性的处理:课程类型(一体化、纯理论、纯实践)、核心课程(重要True或不重要False)、课程性质(必修课、选修课)、考核方式(考试、考查)、课程归属(基本素质与能力课、职业能力课)
322*2=24条记录
课程类别编号 课程类型 核心课程 课程性质 考核方式 课程归属
1 一体化 True 必修课 考试
2 一体化 True 必修课 考查
3 一体化 True 选修课 考试
4 一体化 True 选修课 考查
5 一体化 False 必修课 考试
6 一体化 False 必修课 考查
7 一体化 False 必修课 考试
8 一体化 False 必修课 考查
9 纯理论 True 必修课 考试
10 纯理论 True 必修课 考查
11 纯理论 True 选修课 考试
12 纯理论 True 选修课 考查
5 纯理论 False 必修课 考试
6 纯理论 False 必修课 考查
7 纯理论 False 必修课 考试
8 纯理论 False 必修课 考查
… 以此类推… … … …
24
课程类别_课程类型:(课程类别编号、课程类型编号)、课程类型
课程类别_核心课程:(课程类别编号、核心课程编号)、核心课程
课程类别_课程性质:(课程类别编号、课程性质编号)、课程性质
课程类别_考核方式:(课程类别编号、考核方式编号)、考核方式
课程类别_课程归属:(课程类别编号、课程归属编号)、课程归属(名)
一门课程只属于一种设定课程类别,课程类别可以对应多门课程。
课程<—课程类别,多:1

更新课程表与课程类别表的做法
针对课程与课程类别的情况,以及在对多值属性的处理问题上,我建议将具有多值的属性名单独从表中抽出来创建一个新的实体类。

课程_课程类型:(课程编号、课程类型编号)、课程类型
课程_核心课程:(课程编号、核心课程编号)、核心课程
课程_课程性质:(课程编号、课程性质编号)、课程性质
课程_考核方式:(课程编号、考核方式编号)、考核方式
课程_课程归属:(课程编号、课程归属编号)、课程归属(名)

课程表:课程编号、课程名称、学分、开课学年、开课学期、理论学时、实践学时、备注、
课程类型编号、核心课程编号、课程性质编号、考核方式编号、课程归属编号

对复合属性的处理:
F(班级编号)= 学生人数,简单属性学生人数依赖于学号和班级编号
总学时=理论+实践
F(成绩)=绩点,复合属性绩点函数依赖于属于成绩
F(必修学分或选修学分)=课程的学分,属性必修学分或选修学分决定课程的学分属性值
总学时=理论+实践
F(系部编号、课程编号)=开课学院
总分数=学生<—>课程(选课)表的(匹配)学号的所有成绩之和
平均分=总分数除以课程(选课)表的(匹配)学号的总行数
F(必修课或选修课)=课程性质

学生表的属性名的依赖关系:
系部编号决定系部名;专业编号决定专业名称;班级编号决定班级名称。

将E-R模型映射为表:
一个学生至多选择一个专业,一个专业至多被一个学生选择。学生—>专业,1:1
一个院系至少选择一个专业,一个专业至多被一个院系选择。院系—>专业,1:多
一个学生至多选择一个班级,一个班级对应多个学生。学生—>班级,多:1
一个专业可以设置多个不相同课程,课程可以被多个不同专业选择。
专业<—>课程,多:多。
一个学生除了修读本专业规定的课程之外,还应该修读其它的(选修)课程,一个学生可以选择多个不相同课程,同一课程可以不选择或选择不同需求的学生。
学生<—>课程,多:多。
一个老师至少任一门课程,一门课程对应多个不同的任课老师。
老师<—>课程,多:多。

Create DataBase 教务管理
go
use 教务管理
go

Create Table 学校
(学校编号 int identity(1,1) constraint column_学校编号_pk Primary key not null,
学校名称 varchar(30) not null,
)

Create Table 学院
(系部编号 int identity(1,1) constraint column_系部编号_pk Primary key not null,
系部名 varchar(20)  not null,
学校编号 int not null)

Create Table 班级
(班级编号 int identity(1,1) constraint column_班级编号_pk Primary key not null,
班级名称 varchar(20) not null,
系部编号 int not null)

Create Table 学生
(学号 char(9) constraint column_学号_pk Primary key not null,
姓名 char(8) null,
班级编号 int not null)

Create Table 专业
(专业编号 int identity(1,1) constraint column_专业编号_pk Primary key not null,
专业名称 varchar(20) not null,
系部编号 int not null)


Create Table 教师
(教师编号 int identity(1,1) constraint column_教师编号_pk Primary key not null,
姓名 char(8) not null,
手机号码 char(20) null)

Create Table 课程
(课程编号 int identity(1,1) constraint column_课程编号_pk Primary key not null,
课程名称 varchar (20) not null,
学分 tinyint constraint ck_学分 check(学分>0 and 学分<100),
开课学年 datetime null,
开课学期 tinyint constraint ck_开课学期 check(开课学期>0 and 开课学期<100) null,
理论学时 tinyint constraint ck_理论学时 check(理论学时>0 and 理论学时<100) null,
实践学时 tinyint constraint ck_实践学时 check(实践学时>0 and 实践学时<100) null,
备注 nvarchar(Max) null,
课程类型编号 int not null,
核心课程编号 int not null,
课程性质编号 int not null,
考核方式编号 int not null,
课程归属编号 int not null
)

/*中间表*/

Create Table 课程_教师
(教师编号 int not null,
课程编号 int not null,
课程名 varchar (20) 
constraint column_教师编号_课程编号_pk Primary Key(教师编号, 课程编号)
)

Create Table 学生_课程
(学生编号 int not null,
课程编号 int not null,
成绩 tinyint constraint ck_成绩 check(成绩>=0 and 成绩<100) 
constraint DF_学生_课程_成绩 default(0)
Constraint column_学生编号_课程编号_pk Primary Key(学生编号,课程编号)
)

Create Table 专业_课程
(专业编号 int not null,
课程编号 int not null,
Constraint column_专业_课程_pk Primary Key(专业编号,课程编号)
)

/*********************多值属性****************************/
--课程类型={一体化、纯理论、纯实践}
Create Table 课程_课程类型
(课程类别编号 int identity(1,1) constraint column_课程_课程类型_pk Primary key  not null,
课程类型 char(9) not null,
课程编号 int not null)

--核心课程={重要、不重要}
Create Table 课程_核心课程
(核心课程编号 int identity(1,1) constraint column_课程_核心课程_pk Primary key not null,
核心课程 bit  constraint DF_课程_核心课程  default('0'),
课程编号 int not null)

--课程性质={必修课、选修课}
Create Table 课程_课程性质
(课程性质编号 int identity(1,1) constraint column_课程_课程性质_pk Primary key not null,
课程性质 char(9) null,
课程编号 int not null)

--考核方式={考试、考查}
Create Table 课程_考核方式
(考核方式编号 int identity(1,1) constraint column_课程_考核方式_pk Primary key not null,
考核方式 char(9) not null,
课程编号 int not null)

--课程归属={基本素质与能力课、职业能力课}
Create Table 课程_课程归属
(课程归属编号 int identity(1,1) constraint column_课程_课程归属_pk Primary key  not null,
课程归属 char(20) not null, 
课程编号 int not null)

select [name],[definition],[is_system_named]                             
from [sys].[default_constraints]

select * from sys.key_constraints

select * from sys.foreign_keys

--alter table [table_name] drop constraint [constraint_name]

写于2013-04-09 08:00

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值