简述数据库应用系统的设计步骤

简述数据库应用系统的设计步骤,第1张

数据库设计的基本步骤:

1、系统需求分析与设计。

2、概念结构分析与设计。

3、逻辑结构分析与设计。

4、物理结构分析与设计。

5、系统实施。

6、系统维护。

扩展资料:

数据库设计技巧:

1、原始文件与实体的关系

它可以是一对一,一对多,多对多的关系。一般来说,它们是一对一的关系:一个原始文档只对应于一个实体。在特殊情况下,它们可以是一对多或多对一关系,即一个原始文档对应于多个实体,或者多个原始文档对应于一个实体。

这里的实体可以理解为基本表。在对应关系明确后,对输入接口的设计非常有利。

2、主键和外键

一般来说,实体不能既没有主键也没有外键。在E-R图中,叶中的实体可以定义主键或不定义主键(因为它没有子代),但它必须有外键(因为它有父项)。

主键和外键的设计在全局数据库的设计中起着重要的作用。当全球数据库的设计完成后,一位美国数据库设计专家说:“钥匙无处不在,只有钥匙。”。这是他数据库设计的经验,也体现了他对信息系统核心(数据模型)高度抽象的理念。

因为:主键是一个高度抽象的实体。主键和外键的配对表示实体之间的连接。

3、基本表的属性

基本表不同于中间表和临时表,因为它具有以下四个特点:

原子性。基本表中的字段不可分解。

原始主义。基本表中的记录是原始数据(基本数据)的记录。

演绎的。所有输出数据都可以从基本表和代码表中的数据导出。

稳定。基本表的结构比较稳定,表中的记录要长期保存。

在了解基本表的性质之后,在设计数据库时,可以将基本表与中间表和临时表区分开来。

参考资料来源:百度百科-数据库设计

select  a.学号,b.姓名,c.课程名,a.分数   from 学习 a inner join 学生 b  on a.学号=b.学号  and b.奖学金>0 inner join 课程 c on a.课程号=c.课程号

select  a.课程号,c.课程名,a.分数   from 学习 a inner join 学生 b  on a.学号=b.学号 and b.姓名=‘黎明’  inner join 课程 c on a.课程号=c.课程号 where a.分数<60

前面2个综合下,不写了

前面类似,不写了 

二、 更新teachers_courses表数据:请写出符合下列要求的SQL语句(不要仅针对给出的数据),把所有SQL语句放入文本文件Exam02.SQL中提交。

1. 目前的teachers_courses中只包含了必修课的教师任课情况,假设所有编号IT开始的老师都上了所有编号开始为SPE的选修课,请在teachers_courses插入相应的记录,写出insert语句。

insert into teachers_courses

select teachers.teacherid,courses.courseid, ‘’ from teachers,courses

where teachers.teacherid like 'IT%' and courses.courseid like 'SPE%' and courses.attri=1

2. 假设学校规定年龄小于25岁(当前年份-出生年份)的教师不能上必修课,请删除teachers_courses中的相应记录,写出delete语句。

Delete from teachers_courses where teacherid in (select teacherid from teachers where year(getdate())-year(birthday)<25) and courseid in (select courseid from courses where attri=1)

3. 教师的工作量为其担任教学课程的学分总和,写出更新teachers.workload的update语句。

update teachers set workload=(select sum(courses.grade)

from teachers_courses,courses

where teachers_courses.courseid=courses.courseid

and teachers_courses.teacherid=teachers.teacherid)

三、 写出select语句,实现下列查询:把所有SQL语句放入文本文件Exam03.SQL中提交。

1. 查询所有教师的任课情况,包括教师编号、教师姓名、性别、任课课程名、学分,按教师性别排序,女教师在前。(没有任课的教师可以不显示)。性别显示“男”和“女”。

select a.teacherid,a.teachername,

case when a.sex=0 then '男' when a.sex=1 then '女' end,

b.coursename,b.grade

from teachers a,courses b,teachers_courses c

where a.teacherid=c.teacherid and b.courseid=c.courseid order by 3 desc

2. 上述查询要求包括没有任课的教师编号和姓名,在任课课程名中显示“未任课”,学分列显示为0。

select a.teacherid,a.teachername,

case when a.sex=0 then '男' when a.sex=1 then '女' end,

isnull(c.coursename,'未任课'),isnull(c.grade,0)

from (teachers a left join teachers_courses b on a.teacherid=b.teacherid) left join courses c on b.courseid=c.courseid

order by 3 desc

3. 查询所有没有任课的教师编号、姓名和性别。

select teacherid,teachername,sex from teachers where teacherid not in (select teacherid from teachers_courses)

4. 查询每个教师的总的学时数,包括教师编号、姓名、性别、年龄(当前年份-出生年份)和总学时

select a.teacherid,a.teachername,a.sex,year(getdate())-year(a.birthday), sum(b.grade) from teachers a,courses b,teachers_courses c

where a.teacherid=c.teacherid and b.courseid=c.courseid

group by a.teacherid,a.teachername,a.sex,year(getdate())-year(a.birthday)

5. 对上述查询,仅查询总学时数小于8的并且年龄小于50岁的教师的编号、姓名、性别、年龄和总学时。

select a.teacherid,a.teachername,a.sex,year(getdate())-year(a.birthday), sum(b.grade) from teachers a,courses b,teachers_courses c

where a.teacherid=c.teacherid and b.courseid=c.courseid and year(getdate())-year(a.birthday)<50

group by a.teacherid,a.teachername,a.sex,year(getdate())-year(a.birthday)

having sum(b.grade)<8

6. 查询总学时最多的教师编号,姓名和总学时(可使用视图)。

create view sumgrade (teacherid,grade)

as

select c.teacherid,sum(b.grade) from courses b,teachers_courses c

where b.courseid=c.courseid

group by a.teacherid

select teacherid,teachername,grade from teschers,sumgrade

where teachers.teacherid=sumgrade.teacherid and grade=(select max(grade) from sumgrade)

select a.teacherid,a.teachername,sum(b.grade)

from teachers a,courses b,teachers_courses c

where a.teacherid=c.teacherid and b.courseid=c.courseid

group by a.teacherid,a.teachername

having sum(b.grade)=(select max(grade) from sumgrade)

四、 编写表值函数dept_teachlist,参数为部门编号,返回该部门所有教师的教师编号、教师姓名、必修课总学时、选修课总学时(不包括未任课的教师)。写出验证该函数的select语句(参数为‘IT01’)。把完成的程序放入文本文件Exam04.SQL中提交。

CREATE FUNCTION dept_teachlist (@deptid CHAR(6)) RETURNS @tb_deptlist TABLE (teacherid1 CHAR(6) PRIMARY KEY,teachername varchar(10),num1 INT,num2 INT) AS

BEGIN

--插入该部门教师信息

INSERT into @tb_deptlist

SELECT teacherid,teachername,0,0 FROM teachers WHERE departmentid=@deptid

--计算必修课总学时数

UPDATE @tb_deptlist SET num1=(SELECT sum(b.grade) FROM courses b,teachers_courses c

WHERE b.courseid=c.courseid and b.attri=0 and b.teacherid=teacherid1)

--计算选修课总学时数

UPDATE @tb_deptlist SET num2=(SELECT sum(b.grade) FROM teachers a,courses b,teachers_courses c

WHERE a.teacherid=c.teacherid and b.courseid=c.courseid and b.attri=1 and a.teacherid=teacherid1)

RETURN

END

select * from dept_teachlist('IT01')


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6702880.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存