精华内容
下载资源
问答
  • 数据库管理系统设计
    千次阅读
    2020-06-25 17:26:33

    一、概要

    1.1 数据库管理系统/数据库

    下图展示了DBMS(数据库管理系统)的地位,数据库(系统)其实包含了DBMS和数据两部分。
    在这里插入图片描述

    1.2 架构设计

    在这里插入图片描述

    1.3 设计思路

    1. 数据仓库:使用XML(可拓展标记语言)文件作为微型数据仓库,对XML文件的读写操作相当于对数据的读写操作;
    2. SQL解析: 使用正则表达式解析SQL语句;
    3. 索引:设计索引结构,使用B+树算法;

    实现1、2两步,基本上就能完成一个简陋的数据库管理系统了,因为可以使用SQL语句对存储在XML文件的数据进行增删改查(CRUD)操作。

    1.4 规划

    编程语言:Java

    1. v1.0版本:支持简单、单句SQL解析、以XML文件作为微型数据仓库,在控制台启动和操作
    2. v2.0版本:增加索引

    二、细节

    2.1 XML文件作为数据仓库

    在这里插入图片描述
    1)逻辑上的一张表在物理上是一个文件夹,里面包含多个XML文件
    2)一个XML文件作为一张物理子表(如上图所示),多个物理子表构成一张逻辑表
    3)每张表都有一个配置文件,用来存储数据类型、物理子表数量、是否建有索引等信息
    4)所有对数据表的操作都是基于DOM4j解析对XML的读写操作

    2.2 正则表达式解析SQL语句

    1)SQL语句预处理(去重多余空格、统一转化为小写等)
    2)正则匹配关键字(如select xx from xx 等)
    3)根据SQL语句关键字和关键字后的内容,调用相应的方法

    2.3 B+树索引结构

    1)B+树的key存的要索引的字段,value存索引字段对应的逻辑子表名称
    2)在查询时,根据key对应的value(即逻辑子表名称)直接打开对应的XML文件,然后遍历其中的数据找到符合条件的记录(由于每张物理子表/XML文件设计的容量较小,因此遍历的时间较短,但缺点是物理子表/XML文件过多)
    3) 每张表索引建立后,会把索引持久化到磁盘上(XML文件里),每次启动系统都会加载索引文件到内存中的数据结构中

    三、总结

    实现的是非常简单的一种DBMS,在控制台启动,可以实现一些基础的SQL语句增删改查,对字段建立索引后可大幅提高查询效率。
    缺点及改进如下

    1. 由于SQL解析使用的正则表达式,因此对于复杂的SQL语句(多句复合、嵌套等)处理起来非常麻烦,因此没有继续拓展。改进思路是SQL解析部分使用词法和语法分析器,可以实现更多、更复杂的SQL语句解析;
    2. 由于数据仓库使用的是XML文件,而索引设计在XML文件名上,因此在数据安全、存取效率上都很低。改进思路是自定义文件格式并编写处理代码,数据使用二进制格式(并加密)存储,而索引部分可将B+树持久化到磁盘上(MySQL InnoDB B+树的叶子节点存的就是磁盘上的数据);
    3. 可以考虑做成前后端分离的系统,这样可以将系统部署在服务器上,然后通过浏览器端访问进行增删改查;
    4. 考虑到并发安全,可以对整张表进行加锁(代价最低,实现最简单,用一个字段/变量指示是否加锁即可),如果学习了MySQL之后的话,可以只到对一行记录进行加锁或使用MVCC进行无锁控制。

    源码

    只是简单的实现,还没有往改进的方向上去做。
    github
    gitee

    更多相关内容
  • 数据库方面推荐使用MySQL workbench(免费)或者Navicat,系统通过python编程实现,需安装的库有PyQt5 pyqt5-tools pymysql 打包在了资源里,放到python路径下的Lib文件夹里即可,也可用pip install来安装 Mysql版本...
  • 学生成绩管理系统数据库设计--MySQL/SQL Server

    万次阅读 多人点赞 2020-06-18 13:02:04
    MySQL/SQL Server 数据库设计(学生成绩管理系统设计大纲 1. 项目背景及需求分析 1.1 项目背景 1.2 需求分析 1.2.1 信息需求 1.2.2 功能需求 1.2.3 安全性与完整性需求 2. 概念结构设计 2.1 抽象出系统实体 2.2 ...

    MySQL 数据库设计-学生成绩管理系统

    设计大纲

    在这里插入图片描述

    友情链接

    1、医疗信息管理系统数据库–MySQL

    医疗信息管理系统数据库–MySQL

    2、邮件管理数据库设计–MySQL

    邮件管理数据库设计–MySQL

    3、点餐系统数据库设计–SQL Server

    点餐系统数据库设计–SQL Server

    4、商品管理系统数据库设计–SQL Server

    商品管理系统数据库设计–SQL Server

    5、SQL Server医疗信息管理系统数据库【英文版-源码】–(Medical Management System Database)

    SQL Server医疗信息管理系统数据库【英文版-源码】–(Medical Management System Database)

    6、SQL Server电影院数据库管理系统【英文版-源码】–(Movie Theatre Management System Database)

    SQL Server电影院数据库管理系统【英文版-源码】–(Movie Theatre Management System Database)

    1. 项目背景及需求分析

    1.1 项目背景

    为了深刻的理解MySQL数据库,以学生成绩信息管理为例,设计一个简单、规范、高效的学生成绩信息管理系统数据库。

    1.2 需求分析

    1.2.1 信息需求

    对学校而言,学生成绩管理是管理工作中重要的一环,但是高校学生的成绩管理工作量大、繁杂,人工处理非常困难。因此,借助于强大计算机的处理能力,能够把人从繁重的成绩管理工作中解脱出来,并且更加准确、安全、清晰的管理环境。

    1.2.2 功能需求

    能够进行数据库的数据定义、数据操纵、数据控制等处理功能。具体功能应包括:可提供课程安排、课程成绩数据的添加、插入、删除、更新、查询,学生及教职工基本信息查询的功能。

    1.2.3 安全性与完整性要求

    对于学生成绩管理系统数据库来讲,由于其主要数据是学生成绩,只能由本人以及所教老师及教务处知道,因此做好数据安全性是重中之重。另外,要求所有在校学生的信息都要录入其中,并且要设计好个别情况。

    2. 概念结构设计

    概念结构设计是整个数据库设计的关键,它通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。
    根据学生成绩信息管理数据库设计需求抽象出学生、教师、课程、成绩四个实体,对四个实体做简化处理,默认一门课程仅被一位老师讲授。因简化后关系结构比较简单,故省略了局部E-R图。对4个实体之间的关系进行分析如下:
    一位学生会被多位老师教导,一位老师会教导多位学生,所有学生与教师之间是多对多(m:n)的关系;
    一位学生可能会选修多门课程,一门课程会被多位学生选修,所以学生与课程之间是多对多(m:n)的关系;
    一位学生会有多项成绩(具体指某学生一门课程的分数),一项成绩仅被一位学生拥有,所以学生与成绩是一对多(1:n)的关系;
    一位教师会讲授多门课程,一门课程会被一位教师讲授,所以教师与课程的关系是一对多(1:n)的关系;
    一门课程拥有多项成绩,一项成绩仅被一门课程拥有,所以课程与成绩的关系是一对多(1:n)的关系;

    2.1 抽象出系统实体

    学生(学号、姓名、班级、性别、专业、出生日期、学分);
    老师(教师编号、姓名、学院);
    课程(课程编号、教师编号、课程名称、课程学分);
    成绩(学号、课程编号、分数);

    2.2 全局E-R图

    在这里插入图片描述

    3. 逻辑结构设计

    3.1 关系模式

    E-R图向关系模型转化要解决的问题是如何将实体型和实体间的联系转化为关系模式,如何确定这些关系模式的属性和码。
    设计学生成绩管理数据库,包括学生(students)、老师(teachers)、课程(courses)、成绩(scores)四个实体,其关系模式中对每个实体定义属性如下:

    students 表:学号(sid)、姓名(sname)、班级(sclass)、性别(sgender)、专业(smajor)、出生日期(sbirthday)、学分(credit_points),此为联系“students表”所对应的关系模式,学号为该关系的候选码,满足第三范式。

    teachers表:教师编号(tid)、姓名(tname)、学院(tschool),此为联系“teachers表”所对应的关系模式,教师编号为该关系的候选码,满足第三范式。

    courses表:课程编号(cid)、教师编号(tid)、课程名称(cname)、学分(credit_point),此为联系“courses表”所对应的关系模式,课程编号和教师编号为该关系的候选码,满足第三范式。

    scores表:学号(sid)、课程编号(cid)、分数(score),此为联系“scores表”所对应的关系模式,学号和课程编号为该关系的候选码,满足第三范式。

    3.2 函数依赖识别

    后续更新补充

    3.3 范式

    后续更新补充

    3.4 表结构

    数据库中包含4个表,即学生(students)、老师(teachers)、课程(courses)、成绩(scores)。

    students表的表结构
    在这里插入图片描述
    teachers表的表结构
    在这里插入图片描述
    courses表的表结构
    在这里插入图片描述
    scores表的表结构
    在这里插入图片描述

    4. 物理设计和实施

    4.1 数据库及表创建

    4.1.1 创建数据库

    -- 如果已有该数据库,则删除
    DROP DATABASE IF EXISTS StudentScore;
    
    -- 创建数据库
    CREATE DATABASE StudentScore CHARSET=UTF8;
    

    4.1.2 创建数据表

    -- 使用数据库
    USE StudentScore;
    
    -- 创建数据表
    -- table 1: students
    DROP TABLE IF EXISTS students;
    CREATE TABLE students(
    sid INT(20) UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
    sname VARCHAR(20),
    sclass INT(10),
    sgender VARCHAR(10),
    smajor VARCHAR(20),
    sbirthday DATE,
    credit_points INT(5) -- 学生已修学分
    );
    
    -- table 2: teachers
    DROP TABLE IF EXISTS teachers;
    CREATE TABLE teachers(
    tid INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
    tname VARCHAR(20),
    tschool VARCHAR(20)
    );
    
    -- table 3: courses
    -- 需要完整代码请添加文章底部微信,付费咨询
    
    -- table 4: scores
    -- 需要完整代码请添加文章底部微信,付费咨询
    
    

    4.2 表数据增删改查测试

    4.2.1 MySQL基础知识点总结

    在这里插入图片描述

    4.2.2 精选MySQL练习题数据及解析

    点击查看
    4.2.2 精选MySQL练习题数据及答案解析

    4.2.2.1. 连接查询 - 4题

    1.1 查询同时选修了课程 1 和 课程 2 的学生的信息

    1.2 查询课程 1 比 课程 2 成绩高的学生的信息及课程分数

    1.3 查询课程 1 分数小于 60 的学生信息和课程分数,按分数降序排列

    1.4 查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩

    4.2.2.2. 子查询、连接查询 - 4题

    2.1 查询有成绩的学生信息

    2.2 查询学过 孙悟空 老师所授课程的学生信息

    2.3 查询至少有一门课与学号为 1 的同学所学相同的学生信息

    2.4 查询选修了课程 2 但是没有选修课程 1 的学生信息

    4.2.2.3. 聚合分组、连接查询 - 8题

    3.1 查询同名学生名单,并统计同名人数

    3.2 查询选修了 3 门课程的学生信息

    3.3 查询平均成绩大于等于 85 的所有学生的学号、姓名、平均成绩(保留2位小数)

    3.4 查询平均成绩大于等于 60 分的学生学号、姓名、平均成绩(保留2位小数)

    3.5 查询两门及以上课程分数小于60分的学生学号、姓名及平均成绩(保留2位小数)

    3.6 查询姓 赵 的同学的学生信息、总分,若没选课则总分显示为 0

    3.7 查询所有同学的学号、姓名、选课总数、总成绩,没选课的学生要求显示选课总数和总成绩为 0

    3.8 查询所有学生学号、姓名、选课名称、总成绩,按总成绩降序排序,没选课的学生显示总成绩为 0

    4.2.2.4. if 或 case 语句 - 2题

    4.1 若学号sid为学生座位编号,现开始对座位号调整,奇数号和偶数号对调,如1和2对调、3和4对调…等, 如果最后一位为奇数,则不调换座位,查询调换后的学生座位号(sid)、姓名,按sid排序

    4.2 查询各科成绩最高分、最低分和平均分: 以如下形式显示:课程id、课程名、选修人数、最高分、最低分、平均分、及格率、中等率、优良率、优秀率
    及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
    要求查询结果按人数降序排列,若人数相同,按课程号升序排列,平均分、及格率等保留2位小数

    4.2.2.5. 时间函数 - 6题

    5.1 查询 1990 年出生的学生信息

    5.2 查询各学生的年龄,分别按年份和按出生日期来算

    5.3 查询本周或下周过生日的学生

    5.4 查询本月或下月过生日的学生

    5.5 查询学生信息,要求:学号和年龄同时至少比一位学生的学号和年龄大

    5.6 查询连续相邻3年出生的学生中,学生性别相同的学生信息

    4.2.2.6.综合应用 - 12题

    6.1 查询和学号为 1 的同学学习的课程完全相同的其他同学的信息

    6.2 查询每科均及格的人的平均成绩:学号、姓名、平均成绩(保留2位小数)

    6.3 查询选修 张若尘 老师所授课程的学生中,该门课成绩最高的学生信息及成绩(成绩可能重复)

    6.4 查询各科成绩,按各科成绩进行排序,并显示排名 分数重复时保留名次空缺,即名次不连续

    6.5 查询各科成绩,按各科成绩进行排序,并显示排名 分数重复时不保留名次空缺,即名次连续

    6.6 查询学生 赵雷 的 变形 课程成绩的排名:学生信息,分数,排名 分数重复时不保留名次空缺,即名次连续

    6.7 查询课程 时空穿梭 成绩在第2-4名的学生,要求显示字段:学号、姓名、课程名、成绩 分数重复时不保留名次空缺,即名次连续

    6.8 查询学生的总成绩,并进行排名,总分重复时不保留名次空缺,即名次连续

    6.9 查询学生的总成绩,并进行排名,总分重复时保留名次空缺,及名次不连续 排名名次不连续,不需要去重

    6.10 统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[60-0] 分别所占百分比 结果:保留2位小数

    6.11 查询各科成绩前三名的记录,按照课程编号和分数排序 分数重复时,重复分数按照一名算,即不保留名次空缺,及名次连续

    6.12 查询各科成绩的前两名,列出学生信息、课程名、分数,按照课程名、分数排序 分数重复时,重复分数按照一名算,即不保留名次空缺,及名次连续

    4.2.2.7 MySQL练习题数据及答案解析

    点击查看
    4.2.2 精选36道MySQL练习题数据及答案解析

    4.3 创建视图

    4.3.1 创建一个学生视图,要求显示学生学号、姓名、班级、性别、专业、各科成绩、平均分、总分

    DROP VIEW IF EXISTS v_students_info;
    
    CREATE VIEW v_students_info AS
    SELECT  stu.sid,
    		stu.sname,
    		stu.sclass,
    		stu.sgender,
    		stu.smajor,
    		-- 需要完整代码请添加文章底部微信,付费咨询
    		ifnull(sum(sc.score), 0) AS "总分"
    FROM 	students stu LEFT JOIN
    		scores sc ON stu.sid = sc.sid LEFT JOIN
    		courses c ON c.cid = sc.cid
    GROUP BY stu.sid;
    

    查看视图:
    在这里插入图片描述
    在这里插入图片描述

    4.4 创建函数

    4.4.1 创建一个通过学号sid获取学生信息的函数

    DROP FUNCTION IF EXISTS get_student_info_by_sid;
    
    DELIMITER //
    CREATE DEFINER = CURRENT_USER FUNCTION get_student_info_by_sid(id INT)
    RETURNS VARCHAR(300)
    DETERMINISTIC
    BEGIN
    -- 需要完整代码请添加文章底部微信,付费咨询
    END//
    DELIMITER ;
    -- 调用函数
    SELECT get_student_info_by_sid(8);
    

    调用函数结果:
    在这里插入图片描述
    其中DELIMITER 先定义结束符为 // , 然后又将结束符改为mysql默认的分号结束符。

    了解delimiter 关键字请点击:
    MySQL中 delimiter 关键字详解
    如果出现报错1418:

    Error Code : 1418 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)

    参考下面:
    MySQL ERROR 1418 的解决方法

    4.4.2 自定义函数 2:要求函数体中包含其中一种流程控制语句,要求输入学生学号sid、课程编号,显示学生姓名、课程名称、成绩是否及格(即成绩>=60)

    
    DROP FUNCTION IF EXISTS get_student_scores_by_id;
    
    DELIMITER //
    CREATE DEFINER = CURRENT_USER FUNCTION get_student_scores_by_id(sid INT, cid INT)
    RETURNS VARCHAR(300)
    DETERMINISTIC
    BEGIN
    	-- 多个变量要分开声明,否则会报错
    	DECLARE score INT;
    	DECLARE name VARCHAR(20);
    	DECLARE course_name VARCHAR(20);
    	-- 需要完整代码请添加文章底部微信,付费咨询
    	ELSE
    		RETURN '找不到该学生、课程或该学生没有选课!';
    	END IF;
    END//
    DELIMITER ;
    
    -- 调用函数
    SELECT get_student_scores_by_id(1, 2);
    
    

    调用函数结果:
    在这里插入图片描述

    4.5 创建存储过程

    4.5.1 学生每选修一门课,如果该门课程成绩达到60分及以上,则把该门课程学分加到学生学分里面,输出该学生姓名、学分

    DROP PROCEDURE IF EXISTS add_scores;
    
    DELIMITER //
    CREATE DEFINER = CURRENT_USER PROCEDURE add_scores(
    	IN stu_id INT, 
    	IN co_id INT, 
    	IN s_score INT,
    	OUT name VARCHAR(20),
    	OUT s_credit_point INT
    )
    DETERMINISTIC
    BEGIN
    -- 多个变量要分开声明,否则会报错
    DECLARE points INT;
    -- 需要完整代码请添加文章底部微信,付费咨询
    COMMIT;
    END//
    DELIMITER ;
    
    -- 测试调用存储过程
    SELECT * FROM students WHERE sid > 10;
    CALL add_scores(11, 2, 33, @name, @s_credit_point);
    SELECT @name, @s_credit_point;
    CALL add_scores(12, 2, 88, @name, @s_credit_point);
    SELECT @name, @s_credit_point;
    
    

    调用存储过程结果:
    在这里插入图片描述

    4.6 创建触发器

    4.6.1 创建一个更新学生学分的触发器,如果该学生分数>=60,则给该学生加上这门课的学分

    语法
    create trigger triggerName
    after/before insert/update/delete on 表名 for each row #这句话在mysql是固定的 begin
    sql语句;
    end;

    
    DROP TRIGGER IF EXISTS update_credit_point;
    
    DELIMITER //
    CREATE TRIGGER update_credit_point
    AFTER INSERT ON scores FOR EACH ROW
    BEGIN 
    	DECLARE points INT;
    	-- 需要完整代码请添加文章底部微信,付费咨询
    	END IF;
    END//
    DELIMITER ;
    
    
    -- 测试数据
    SELECT * FROM students WHERE sid < 3;
    INSERT INTO scores VALUES
    (1, 4, 77),
    (2, 4, 55);
    SELECT * FROM students;
    

    测试结果:
    在这里插入图片描述
    终于写完啦!

    展开全文
  • 自己做的数据库课程设计包括需求分析、逻辑结构设计、概念设计、物理结构设计数据库实施和维护、sql语句增删查改、存储过程触发器都有、还有各种图也画了
  • 用mfc做一个电影票务系统,对sqlserver2008的数据库进行操作,增删查改等操作,求大神指点
  • 教务管理系统 数据库设计

    千次下载 热门讨论 2011-12-25 21:52:54
    数据库原理课,设计了一个高校教务管理系统数据库,word文档,包括需求分析,ER图,具体的代码设计,SQL语句的数据库查询,创建视图
  • 数据库课程设计 ——酒店管理系统

    万次阅读 多人点赞 2019-05-31 10:36:11
    (1)酒店管理系统用于满足酒店工作人员和管理人员的需求。 (2)酒店管理人员和工作人员可以为酒店房间加入入住和退房记录,并生成相应的报表用于查阅,确认和保存,酒店工作人员可以浏览、查询、统计、添加酒店...

    一、 需求分析

    1.软件需求

    (1)酒店管理系统用于满足酒店工作人员和管理人员的需求。
    (2)酒店管理人员和工作人员可以为酒店房间加入入住和退房记录,并生成相应的报表用于查阅,确认和保存,酒店工作人员可以浏览、查询、统计、添加酒店房间的入住离开信息。管理员可以查询房间信息、查询员工信息、更改房间信息、更改员工信息等。
    (3) 客户可以申请入住酒店,酒店工作人员需要对客户的姓名、性别、身份证号、房间号、入住时间、联系方式等信息进行记录,客户退房时进行退房记录。
    4、管理员和员工可以通过姓名、入住日期、身份证号、房间号、联系方式等信息查询客户入住和离开情况。
    从客户角度考虑业务流程如图1-1所示。
    在这里插入图片描述

                                                         图1-1 酒店管理业务流程图

    2.功能描述

    根据需求分析,得到系统的功能需求。作为一个酒店管理系统,应满足入住办理、入住信息查询、房间查询、退房办理等功能,其功能要求如下:
    (1)入住办理。客户凭借会员卡入住,每当有客人需要入住时进行办理程序。工作人员需要记录客人的姓名、性别、身份证号、入住时间、联系方式等。若办理入住的房间不为空则不允许办理入住。
    (2)入住信息查询。工作人员可以对已入住的客户进行信息查询。需要支持精准查询,如通过房间号查询、通过姓名查询、通过入住日期查询、通过联系方式查询等,也要支持模糊查询,如通过姓氏查询、通过入住年月查询、通过性别查询等。
    (3)房间查询。管理员可以查询某个房间是否为空以及历史入住/退房信息等。可以查询的信息有:房间类型、房间价格、房间当前是否为空等,若当前房间已被入住,则需要额外显示入住人姓名、入住人联系方式、入住人入住时间等信息。
    (4)退房办理。当客户退房时进行退房办理。工作人员需要记录入住人退房时间、罚款等信息。若退房的房间为空,则不允许办理。
    (5)员工查询。 管理员可以对酒店员工信息进行查询,可查询员工姓名、性别、联系方式等。
    (6)更改房间信息。 管理员可以更改房间信息,如房间类型、价格、增加房间、删除房间等。
    (7)更改员工信息。管理员可以更改员工信息,如姓名、性别、职位、增加员工、删除员工等。

    3.数据流图和数据字典

    Ⅰ.数据流图
    (1)顶层数据流图
    通过对用户需求进行分析并对其进行归纳和总结,得到用户的顶层数据流图,如图1-2所示。
    在这里插入图片描述
                                                                            图1-2 顶层数据流图

    (2)对顶层数据从流图进行分解,形成第2层的数据流图,如图1-3所示。
    在这里插入图片描述

                                                                            图1-3 第二层数据流图
    第二层数据流图得到客户申请入住,客户申请退房,工作人员查询,管理员查询,管理员修改等业务的数据流程图,为进一步设计奠定基础。
    (3)第三层数据流图
    将第二层的数据流图中的每个业务进行分解,得到各业务的子数据流图,就形成第三层的数据流图。第三层数据流图分为入住申请,退房申请,工作人员查询,房间信息维护,员工信息维护。
    在这里插入图片描述
                                                                            图1-4 第三层数据流图(客户入住)

    1) 客户入住数据流图(图1-4)。客户入住数据流包括审核员工信息,审核入住信息,审核现有房间信息,修改房间信息/入住记录。
    2) 客户退房数据流图(图1-5)。客户退房数据流包括退房申请,退房超期处理,修改房间信息/退房记录。
    在这里插入图片描述
                                                                            1-5 第三层数据流图(客户退房)
    3) 工作人员查询业务流图(图1-6)。工作人员查询业务流包括入住记录查询,房间信息查询。
    在这里插入图片描述

                                                                         图1-6 第三层数据流图(工作人员查询业务)

    4) 管理员查询业务流图(图1-7)。管理员查询业务流包括入住记录查询,房间信息查询,员工信息查询。
    在这里插入图片描述
                                                                         图1-7 第三层数据流图(管理员查询)
    5) 管理员管理业务流图(图1-8)管理员管理业务流包括入住信息管理,房间信息管理,员工信息管理。
    在这里插入图片描述
                                                                         图1-8 第三层数据流图(管理员管理)

    Ⅱ.数据字典
    (1)数据项
    酒店管理系统的数据流图中,系统涉及的数据项具体内容如下所述。
    数据项:客户编号
    含义说明:唯一识别客户
    别名:编号
    类型:字符型
    长度:18
    取值范围:000000000000000001~999999999999999999

    数据项:客户姓名
    含义说明:客户的姓名
    别名:姓名
    类型:字符型
    长度:12

    数据项:客户性别
    含义说明:客户的性别
    别名:性别
    类型:字符型
    长度:1
    取值范围:男 或 女

    数据项:客户身份证号
    含义说明:客户的身份证号
    别名:身份证号
    类型:字符型
    长度:18
    取值范围:000000000000000001~999999999999999999

    数据项:客户类型
    含义说明:客户的会员卡类型
    别名:类型
    类型:字符型
    长度:10

    数据项:客户入住时间
    含义说明:客户的入住时间
    别名:入住时间
    类型:日期

    数据项:客户联系方式
    含义说明:客户的联系方式,如手机号
    别名:联系方式
    类型:字符型
    长度:11
    取值范围:00000000000~99999999999

    数据项:罚款金额
    含义说明:客户超期的罚款
    别名:罚金
    类型:数值型
    小数位数:1
    取值范围:0.1~9999.9

    其他数据项此处不再一一描述,如表1-1所示。
                                                                         表1-1 数据项列表
    在这里插入图片描述

    (2)数据结构
    数据结构:客户。
    含义说明:酒店管理系统的主题数据结构,定义一个入住客户的信息。
    组成:客户编号,客户姓名,客户性别,客户类别,客户身份证号,客户联系方式。

    数据结构:房间。
    含义说明:酒店管理系统的主体数据结构,定义一个房间的有关信息。
    组成:房间号,房间类型,房间价格。

    数据结构:员工。
    含义说明:酒店管理系统的主体数据结构,定义一个员工的有关信息。
    组成:员工编号,员工姓名,员工性别,员工身份证号,员工职位,员工工资,员工密码。

    数据结构:管理员。
    含义说明:酒店管理系统的主体数据结构,定义一个管理员的有关信息。
    组成:管理员编号,管理员姓名,管理员密码。

    数据结构:入住记录。
    含义说明:定义一个客户的入住有关信息。
    组成:入住编号,客户姓名,客户类型,客户入住时间,客户应退房时间,房间号,办理人。

    数据结构:退房记录。
    含义说明:定义一个客户的退房有关信息。
    组成:退房编号,客户姓名,客户类型,客户入住时间,客户退房时间,房间号,罚款金额,办理人。

    数据结构:客户类别。
    含义说明:定义一个客户分类有关的信息。
    组成:类别编号,类别名称,超时罚款金额,折扣。

    (3)处理逻辑描述
    处理逻辑描述如表1-2表示。
    在这里插入图片描述
                                                                         表1-2 处理逻辑列表

    二、 概念结构设计阶段

    1. 局部E-R图

    根据不同的对象,从第三层数据流图开始,分别设计各分E-R图。
    (1) 由图1-4第三层数据流图(客户入住)和图1-5第三层数据流图(客户退房)抽象出的分E-R图如图1-9所示。
    在这里插入图片描述
                                                                      图1-9 分E-R图1
    (2) 由图10-3 第二层数据的数据流图中抽象出客户注册的分E-R图如图1-10所示。
    在这里插入图片描述
                                                                      图1-10 分E-R图2

    (3)由图1-2的数据流图抽象出的分E-R图见图1-11、图1-12和图1-13。

    在这里插入图片描述

                      图1-11 分E-R图3                     图1-12 分E-R图4                                           图1-13 分E-R图5

    2. 整体E-R图

    合并各分E-R图,消除属性冲突、命名冲突和结构冲突等三类冲突,再消除不必要的冗余,得到系统初步E-R图。如图1-14所示。
    在这里插入图片描述
                                                                图1-14 系统初步E-R图

    系统E-R图各实体的属性如下:
    (1) 房间(room):房间号,房间类型,房间价格。
    (2) 客户(customer):客户编号,客户姓名,客户性别,客户身份证号,客户联系方式,办卡日期。
    (3) 员工(worker):员工编号,员工姓名,员工性别,员工身份证号,员工职位,员工工资,员工密码。
    (4) 管理员(manager):管理员编号,管理员姓名,管理员联系方式,管理员密码。
    (5) 客户类别(customer type):类别名称,折扣,超时罚款金额。
    各E-R图中联系的属性如下:
    (1) 入住记录(in history):入住编号,客户姓名,入住时间,应退房时间,客户类别,办理人。
    (2)退房记录(out history):退房编号,客户姓名,入住时间,退房时间,罚款,办理人。

    三、逻辑结构设计阶段

    1.E-R图向关系模式转换

    (1)生成关系模式
    客户类别和客户的联系是1:n,可以将它们之间的联系与n端实体客户合并;管理员与客户、员工、房间也是1:n,同样可以将其中的联系与n端实体合并,而客户与房间之间的入住和退房联系方式是n:m,将其联系转化称独立的关系模式。具体的基本E-R图向关系模式的转化如下所述。

    1. 房间:房间(房间号,房间类型,房间价格)。
    2. 客户:客户(客户编号,客户姓名,客户性别,客户身份证号,客户类别,客户联系方式,办证时间)。
    3. 员工:员工(员工编号,员工姓名,员工性别,员工身份证号,员工职位,员工工资,员工密码)。
    4. 管理员:管理员(管理员编号,管理员姓名,管理员密码)。
    5. 客户类别:客户类别(类别编号,类别名称,超时罚款金额,折扣)。
    6. 入住记录:入住记录(入住编号,客户姓名,客户类型,客户入住时间,客户应退房时间,房间号,办理人)。
    7. 退房记录:退房记录(退房编号,客户姓名,客户类型,客户入住时间,客户退房时间,房间号,罚款金额,办理人)。
      (2) 关系模式的优化
      关系模式room,customer,,manager,customer type,in history,out history不存在非主属性对主属性的部分函数依赖,也不存在传递函数依赖,已经达到3NF 。但worker存在传递函数依赖,优化为员工(员工编号,员工姓名,员工性别,员工身份证号,员工职位,员工密码)。
      (3) 数据库模式的定义
      根据上述关系模式和转换原则,可得到数据库模式和用户子模式。为了方便理解和使用,表明和列名采用驼峰命名法,数据库的模式如表1-3~~表1-9所示,用户子模式如表1-10~1-14表所示。
                                                              表1-3 房间信息表
      在这里插入图片描述

                                                                    表1-4 客户信息表
    在这里插入图片描述

                                                                    表1-5 员工信息表
    在这里插入图片描述

                                                                    表1-6 管理员信息表

    在这里插入图片描述
                                                                    表1-7 客户类别表
    在这里插入图片描述
                                                                    表1-8 入住记录表
    在这里插入图片描述
                                                                    表1-9 退房记录表
    在这里插入图片描述
    (4) 用户子模式定义
    子模式是用户视图,根据用户需求,系统一共设计四个子模式。每个子模式的作用如表10-10所示。
                                                                    表10-10 子模式定义

    在这里插入图片描述

                                                                    表1-11 客户基本信息视图

    在这里插入图片描述
                                                                    表1-12 房间基本信息视图

    在这里插入图片描述
                                                                    表1-13 客户入住记录视图
    在这里插入图片描述

                                                                    表1-14 客户退房记录视图

    在这里插入图片描述

    2. 施加约束

    (1) 域约束
    域是属性可能具有的值的集合。域定义包括语义成分和物理成分,除了满足一定的物理成分外,还必须满足一定的语义要求。例如,性别的取值为字符型,宽度为2个字符.只要满足上述两个条件就满足物理要求。但是满足物理成分的数据不一定是有意义的。因此域还必须满足一定的语义要求。
    另一种约束类型为值是否为必填项,即值是否为空。对于某些值必须设计为必填项,才能确保数据有意义。例如客户的姓名必须为必填项。
    (2) 唯一性约束
    唯一性约束是约束的另一种类型。这种约束一班由DBMS来施加,因为它能创建数据结构来使唯一性检查更快地进行。为了达到这个目的,可以使用唯一性索引。
    在本系统中,客户编号,客户身份证号,员工编号等必须不重复,可通过为客户编号,客户身份证号,员工编号等分别创建唯一性索引,以实现唯一性索引。
    (3) 联系约束
    1) 参照完整性约束
    所有的参照完整性约束都限制在外键上。如关系模式入住记录:入住记录(入住编号,客户姓名,客户类型,客户入住时间,客户应退房时间,房间号,办理人)。
    客户姓名作为外键,约束说明它的值必须在客户信息表中存在,否则这条数据就没有意义。
    2) 联系基数
    联系基数约束来源于对象连接属性的基数设定。在本系统中,客户类型与客户是1:n的约束,因此一个用户一定与一个用户类型相联系,一个用户类型有多个用户。
    4. 业务规则约束
    业务规则约束是针对指定应用的逻辑和要求的,它们来源于使用数据库组织中的应用程序和策略。酒店管理应用中的业务规则是:
     房间的价格为0~99999
     性别的取值是‘男’或‘女’
     如果房间已订出就不能再被申请入住
     如果房间没有订出就不能申请退房
     如果入住超期,按天收取罚金
    由于业务规则是依赖于应用的,因此在SQL Server中,通过创建触发器来实现业务规则的校验和限制。

    四、数据库的建立

    1. 数据库存储结构

    将酒店管理系统的数据库名称设为HotelManagementLibrary,数据库只有一个数据文件和一个日志文件,保存在默认路径下。
    创建数据库命令为
    CREATE DATABASE HotelManagementLibrary
    为数据库中各基本表建立的索引如下所述。
    (1)基本表Room,Customer,Worker,Manager的主码RoomID,CustomerID,WorkerID,ManagerID的值唯一,且经常出现在连接、查询条件和操作中出现,建立唯一性索引。
    (2)基本表Room、Customer的属性RoomType和CustomerType经常在查询条件中出现,因此建立唯一性索引。
    (3)入住记录表InHistory和退房记录表OutHistory的属性CustomerName和RoomID经常在查询条件中出现,考虑建立索引。

    2.表和视图的创建

    (1)建立数据表
    1)客户信息表的建立

    CREATE TABLE Customer (
    	CustomerID nvarchar(10) PRIMARY KEY,
    	CustomerName nvarchar(10) NOT NULL,
    	CustomerSex nvarchar(2) DEFAULT '男' CHECK (CustomerSex = '男'
    	OR CustomerSex = '女'),
    	CustomerIDNumber nvarchar(18) NOT NULL,
    	CustomerType nvarchar(10) NOT NULL,
    	CustomerPhone nvarchar(11) NOT NULL,
    	CustomerCreateDate date NOT NULL,
    	FOREIGN KEY (CustomerType)
    		REFERENCES CustomerType (TypeName)
    );
    

    2) 员工信息表的建立

    CREATE TABLE Worker (
    	WorkerID nvarchar(10) PRIMARY KEY,
    	WorkerName nvarchar(10) NOT NULL,
    	WorkerSex nvarchar(2) DEFAULT '男' CHECK (WorkerSex = '男'
    	OR WorkerSex = '女'),
    	WorkerIDNumber nvarchar(18) NOT NULL,
    	WorkerPosition nvarchar(10) NOT NULL,
    	WorkerPassword nvarchar(20) NOT NULL
    );
    

    3)房间信息表的建立

    CREATE TABLE Room (
    	RoomID nvarchar(10) PRIMARY KEY,
    	RoomType nvarchar(10) NOT NULL,
    	RoomPrice float NOT NULL,
    	RoomState nvarchar(10) DEFAULT '未入住' CHECK (RoomState = '已入住'
    	OR RoomState = '未入住')
    );
    

    4)管理员信息表的建立

    CREATE TABLE Manager (
    	ManagerID nvarchar(10) PRIMARY KEY,
    	ManagerName nvarchar(10) NOT NULL,
    	ManagerPassword nvarchar(20) NOT NULL
    );
    

    5) 客户类型表的建立

    CREATE TABLE CustomerType (
    	TypeName nvarchar(10) PRIMARY KEY,
    	Discount float NOT NULL,
    	Fine float NOT NULL
    );
    

    6) 入住记录表的建立

    CREATE TABLE InHistory (
    	InID nvarchar(10) PRIMARY KEY,
    	CustomerID nvarchar(10) NOT NULL,
    	CustomerType nvarchar(10) NOT NULL,
    	CustomerInDate date NOT NULL,
    	CustomerOutDate date NOT NULL,
    	RoomID nvarchar(10) NOT NULL,
    	Worker nvarchar(10) NOT NULL,
    	FOREIGN KEY (CustomerID)
    		REFERENCES Customer (CustomerID),
    	FOREIGN KEY (CustomerType)
    		REFERENCES CustomerType (TypeName),
    	FOREIGN KEY (RoomID)
    		REFERENCES Room (RoomID),
    	FOREIGN KEY (Worker)
    		REFERENCES Worker (WorkerID)
    );
    

    7)退房记录表的建立

    CREATE TABLE OutHistory (
    	OutID nvarchar(10) PRIMARY KEY,
    	CustomerID nvarchar(10) NOT NULL,
    	CustomerType nvarchar(10) NOT NULL,
    	CustomerInDate nvarchar(10) NOT NULL,
    	CustomerOutDate nvarchar(10) NOT NULL,
    	RoomID nvarchar(10) NOT NULL,
    	Worker nvarchar(10) NOT NULL,
    	FOREIGN KEY (CustomerID)
    		REFERENCES Customer (CustomerID),
    	FOREIGN KEY (CustomerType)
    		REFERENCES CustomerType (TypeName),
    	FOREIGN KEY (RoomID)
    		REFERENCES Room (RoomID),
    	FOREIGN KEY (Worker)
    		REFERENCES Worker (WorkerID)
    );
    

    (2)建立视图
    1)客户基本信息视图
    用于查询客户基本信息的视图定义如下:

    CREATE VIEW CustomerView (
    	客户编号, 
    	客户姓名, 
    	客户性别, 
    	客户类型, 
    	客户联系方式, 
    	办卡时间
    )
    AS
    SELECT CustomerID, CustomerName, CustomerSex, CustomerType, CustomerPhone
    	, CustomerCreateDate
    FROM Customer
    

    2)房间基本信息视图
    用于查询房间基本信息的视图定义如下:

    CREATE VIEW RoomView (
    	房间号, 
    	房间类型, 
    	房间价格
    )
    AS
    SELECT RoomID, RoomType, RoomPrice
    FROM Room
    

    3)入住记录基本信息视图
    用于查询入住记录的视图定义如下:

    CREATE VIEW InHistoryView (
    	入住编号, 
    	客户编号, 
    	客户类型, 
    	客户入住时间, 
    	客户应退房时间, 
    	房间号
    )
    AS
    SELECT InID, CustomerID, CustomerType, CustomerInDate, CustomerOutDate
    	, RoomID
    FROM InHistory
    

    4)退房记录基本信息视图
    用于查询退房记录的视图定义如下:

    CREATE VIEW OutHistoryView (
    	退房编号, 
    	客户编号, 
    	客户类型, 
    	客户入住时间, 
    	客户退房时间, 
    	房间号, 
    	超时罚款
    )
    AS
    SELECT OutID, CustomerID, CustomerType, CustomerInDate, CustomerOutDate
    	, RoomID, Fine
    FROM OutHistory
    

    五、窗体设计

    在这里插入图片描述

    ==================2021.6.22 ===========
    当初写这篇文章本意是做个记录,当时作为一个大二小白刚刚接触C#没学习过软件工程随手做的一个课设,之后也并没有朝C#方向继续发展。现在回顾感觉代码质量较低且不规范,逻辑也不够清晰,私认为并没有什么值得学习的地方,也怕误人子弟本想雪藏,但最近越来越多的同学希望我分享源码学习,现在分享给大家。由于时间久远、能力不足等原因不提供答疑希望大家理解。
    源码地址:https://github.com/majunbo2044/Hotel-Management-System/tree/master
    码字不易,欢迎投喂
    在这里插入图片描述在这里插入图片描述

    展开全文
  • 数据库课程设计——学生宿舍信息管理系统

    万次阅读 多人点赞 2018-09-17 23:33:00
    数据库课程设计——学生宿舍信息管理系统 目录  1.设计目的... 2 2、任务与要求... 2 3、学生宿舍管理系统课程设计... 2 3.1 引言... 2 3.2需求分析... 2 3.2.1....

    数据库课程设计——学生宿舍信息管理系统

    目录                                                                                             

    1.设计目的... 2

    2、任务与要求... 2

    3、学生宿舍管理系统课程设计... 2

    3.1 引言... 2

    3.2需求分析... 2

    3.2.1. 2

    3.2.2. 3

    3.3概念设计... 6

    3.4逻辑设计... 10

    3.5物理结构设计... 12

    3.6数据库实施... 14

    3.6.1数据库表的定义... 14

    3.6.2视图的定义:... 15

    3.6.3索引:... 16

    3.6.4触发器的定义:... 17

    3.6.5用户的定义:... 18

    3.6.6 对数据的管理:... 18

    3.7系统调试和测试... 19

    4.系统评价... 20

    4.1我的系统特色:... 20

    4.2 系统不足及改进... 21

    5.设计心得... 21

     

    1.设计目的

    《数据库系统原理》课程设计是软件工程和计算机科学与技术专业集中实践性环节之一,旨在让我们自身加深对数据库基础理论和基本知识的理解,掌握设计数据库管理系统的基本方法,锻炼运用知识解决实际问题的动手能力。

    2、任务与要求

    要求学生们从给定的设计题目中进行选择,进行需求分析,概念设计、逻辑设计,数据库的设计过程,表结构、表之间的关联,给出视图的定义、触发器的定义、索引,安全性的实现,用SQL语句等在SQL Server 2008系统中实现数据库的数据输入,查询,更新和输出;给出实现效果截图及部分测试结果。

     

    3、学生宿舍管理系统课程设计

    3.1 引言

     

    随着社会的发展以及教育水平的提高,当今社会在校生的数量越来越庞大。与此同时,使用曾经的手工的方式对学生的信息进行管理效率非常低下。在互联网技术高度发达的今天 ,使用数据库技术队对学生的住信息进行管理能够使学校对学生信息的管理更加的高效,检索迅速,查找方便,可靠性高存储量大。使用数据库技术的这些优点可以使得学生信息出错的发生。同时使用数据库技术可以使学生住宿信息长时间稳定地保存,也不容易丢失。开发出这样的一个数据库迫在眉睫。

    3.2需求分析

    3.2.1

     系统需求调查的方法为访谈法,通过对多个学校的宿舍管理人员进行交谈,从而得出系统的主要任务和特定的要求。系统的主要任务是能够对宿舍信息,学生信息,管理员信息,住宿信息进行登记,调整,并能进行各种查询以及信息的备份。

     

    完整性要求:防止不符合语义的数据进入数据库。

    安全性要求:需要防止客户对数据进行未经授权的访问。

    性能要求:最好能够实现并发访问,允许多个用户同时对数据库中的数据进行访问。

    一致性要求:防止数据库进入不一致状态。

    数据库要求:各种各样的故障都可能发生,出现意外时,,尽可能的确保任何数据在任何情况下都不会丢失。

    3.2.2

    系统的业务流程:

    学生入住和退宿时通过管理员进行登记;

    住宿产生的各种费用以及使用的各项物品由管理员进行登记;

    管理员将登记的各项信息上报给教务处;

    教务处将各项住宿信息进行统一管理;

    储存的所有数据供不同权限的客户进行访问;

     

     

    数据字典:

    学生基本信息

    编号

    属性名

    类型

    解释

    备注

    0001

    学号

    Varchar(15)

    0002

    姓名

    Varchar(10)

    0003

    性别

    Varchar(2)

    男、女

    0004

    年龄

    Int

    0……100之间

    0005

    手机号

    Varchar(15)

    手机号码

    0006

    专业

    Varchar(20)

     

    住宿费用信息:

     

     

    编号

    属性名

    类型

    解释

    备注

    0008

    表单编号

    Varchar(15)

    0009

    学号

    Varchar(15)

    0010

    宿舍号

    Varchar(6)

    不是门牌号

    0011

    水费

    Double(6)

    大于0

    0012

    电费

    Double(6)

    大于0

    0013

    维修费

    Double(6)

    大于0

    0014

    住宿费

    Double(6)

    大于0

    0015

    日期

    Date(8)

    0016

    合计

    Double(6)

    大于0

     

     

     

    物品管理信息:

     

    编号

    属性名

    类型

    解释

    备注

    0017

    员工号

    Varchar(15)

    0018

    宿舍号

    Varchar(15)

    0019

    桌子

    Int

    大于0

    0020

    椅子

    Int

    大于0

    0021

    Int

    大于0

    0022

    电扇

    Int

    大于0

    0023

    Int

    大于0

    0024

    窗户

    Int

    大于0

     

     

     

    宿舍信息

     

    编号

    属性名

    类型

    解释

    备注

    0025

    宿舍编号

    Varchar(15)

    0026

    楼号

    Varchar(15)

    0027

    区域

    Varchar(15)

    校园内

    ABCDEFG

    0028

    人数

    Int

    0……8

    0029

    房间类型

    Varchar(15)

    按人数分

    1(四人)2(六人)3(八人)

     

     

    管理员信息

     

    编号

    属性名

    类型

    解释

    备注

    0030

    员工号

    Varchar(15)

    0031

    姓名

    Varchar(10)

    0032

    性别

    Varchar(2)

    男,女

    0033

    年龄

    Int

    0……100

    0034

    手机号

    Varchar(15)

    11位

    0035

    楼号

    int

    0036

    区域

    int

    ABCDEFG

    0037

    职位

    Varchar(2)

    1(高级员工)2(普通员工)

     

     

    3.2.2 系统功能描述:

    对学生的信息进行管理;

    对宿舍信息进行管理;

    对管理员信息进行管理;

    对宿舍物品进行登记和管理;

    对住宿产生的各项费用进行登记和管理;

    对已经更改的学生和管理员信息进行保存

     

    在这幅图中,其中各项从左往右前5部分功能都包括各自信息的增删改查,第六项功能为学生和教师信息的备份,也就是已修改信息储存。

    3.3概念设计

    (说明使用数据库概念设计的基本思想和原理方法,设计出系统E-R图)

    基本思想:将需求分析得到的用户需求抽象为信息结构,分析数据字典中数据字典间内在语义关联,并将其抽象表示为数据的概念模式,从而能真实,充分地反应真实世界,包括事物和事物之间的联系,能满足用户对数据的处理需求,是现实世界的一个真实模型,易于理解,从而可以用它和不熟悉计算机的人交换意见,且易于更改。方法:首先分析整个系统中涉及到的实体,得到局部的ER图。然后分析这些实体之间的关系,进行连接从而得到

     

     

     

     

     

     

    3.4逻辑设计

    基本思想:首先整个系统一共可以划分出三个实体,分别是学生,管理员和宿舍,三者之间构成一个三角关系。同时,学生和宿舍之间的住宿关系衍生出一系列的住宿产生的费用,管理员和宿舍的管理关系衍生出一系列需要管理的物品,因此五张表相互关联生成完整的数据库系统。

    数据库关系图:

    学生的个人信息:学号,姓名,性别,年龄,手机号码,专业,管理员号

    student(stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe,manager_num)

     

    宿舍费用信息:表单编号,水费,电费,维修费,住宿费,总费用,日期

    live(list_num,stu_num,dor_num,water,electric,service,lodge,total,date)

     

    宿舍物品信息:桌子,椅子,床,灯,

    tool(mana_num,dor_num,table,chair,bed,light)

     

    宿舍信息:宿舍编号,人数,房间类型,楼号,区域

    dormitory(dor_num ,prople_total,size, build_num,zone)

     

    宿舍管理人员信息:员工号,姓名,性别,年龄,手机号

    manager(mana_num,mana_name,mana_gender,mana_age,mana_tele)

      

      

    3.5物理结构设计

     

    物理设计的基本思想:根据逻辑设计出的逻辑模式,DBMS及计算机系统所提供的手段和施加的限制,设计数据库的内模式,即文件结构,各种路径,控件分配,记录的存取方式等,为逻辑数据结构选取一个最合适的应用环境的物理结构。

    学生基本信息表:

     

    属性名

    类型

    长度

    备注

    Stu_num

    varchar

    15

    Stu_name

    varchar

    10

    Stu_gender

    varchar

    2

    男、女

    Stu_age

    int

    4

    0……100之间

    Stu_tele

    varchar

    15

    Stu_spe

    varchar

    20

    住宿费用信息表:

     

    属性名

    类型

    长度

    备注

    List_num

    Varchar

    15

       Stu_num

    Varchar

    15

       Dor_num

    Varchar

    15

    water

    double

    6

    大于0

    Elect

    double

    6

    大于0

        Repaire

    double

    6

    大于0

    live

    double

    6

    大于0

    date

    date

    8

    指的是具体一年

    物品管理信息表:

     

    属性名

    类型

    长度

    备注

    Mana_num

    Varchar

    15

        Dor_num

    Varchar

    15

    Desk

    Int

    2

    大于0

    Chair

    Int

    2

    大于0

    Bed

    Int

    2

    大于0

    fan

    Int

    2

    大于0

    lighr

    Int

    2

    大于0

    window

    Int

    2

    大于0

    宿舍信息表:

    属性名

    类型

    长度

    备注

    Dor_num

    Varchar

    15

    Build_num

    Varchar

    2

    Zone

    Varchar

    2

    ABCDEFG

    People_total

    Int

    2

    0……8

    size

    varchar

    2

    1(四人)2(六人)3(八人)

    管理员信息表:

    属性名

    类型

    长度

    备注

       Mana_num

    Varchar

    15

    Mana_name

    Varchar

    10

    Mana_gender

    Varchar

    2

    男,女

    Mana_age

    Int

    4

    0……100

    Mana_tele

    varchar

    15

    11位

    Build_num

    int

    2

    zone

    varchar

    2

    ABCDEFG

    3.6数据库实施

    数据库的实施:数据库设计完成后,设计人员要用DBMS提供的数据定义语言和其他的使用程序将数据库逻辑结构设计和物理结构设计的结构用DDL严格描绘出来,成为DBMS可以接受的源代码,再经过调试产生目标模式。最后将数据装入数据库。

     

    3.6.1数据库表的定义

    创建学生信息表:

     Create table student

    (stu_num  varchar(15),

    Stu_name  varchar(10),

    Stu_gender  varchar(2)  check(stu_gender=’男’ or stu_gender=’女’),

    Stu_age  int  check(stu_age>0 and stu_age<100),

    Stu_tele  varchar(15),

    Stu_spe  varchar(20),

    Primary key (stu_num),

    );

     

    创建费用信息表:

     Create  table  live

    ( list_num  varchar(15),

    Stu_num  varchar(15),

    Dor_num  varchar(15),

    Water  float check(water>=0),

    Elect  float  check(elect>=0),

    Repair  float  check(repair>=0),

    Living  float  check(living>=0),

    statu  int default(1), 

    Date  date,

    Primary key(list_num),

    Foreign key (stu_num ) references  student(stu_num)

    on update cascade,

    Foreign key (dor_num ) references  dormitory(dor_num)

    on update cascade

    );

     

     

    创建物品信息管理表:

    Create  table tool

    ( mana_num  varchar(15),

    Dor_num  varchar(15),

    desk  int  check(desk>=0),

    Chair  int  check(chair>=0),

    Bed  int  check(bed>=0),

    Light  int  check(light>=0),

    Primary key (dor_num),

    Foreign key (mana_num ) references  manager(mana_num)

    on update cascade on delete set null

    );

     

    创建宿舍信息管理表:

     Create table dormitory

    (dor_num varchar(15),

    People_total  int  check(people_total>=0 and people_total<=8),

    Size   int check(size=1 or size=2  or size=3)

    );

     

    创建管理员信息表:

     Create table manager

    (mana_num  varchar(15),

    mana_name  varchar(10),

    mana_gender  varchar(2)  check(stu_gender='男' or stu_gender='女'),

    mana_age  int  check(stu_age>0 and stu_age<100),

    mana_tele  varchar(15),

    Primary key (mana_num)

    );

     

    3.6.2视图的定义:

    所有的信息汇总在一起:

    Create view allmass

    (stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe,stu_statu,list_num,dor_num,water,elect,repair,living,live_status,Date,people_total,size,dor_status,mana_num,desk,chair,bed,light,tool_statu,mana_name,mana_gender,mana_age,mana_tele,mana_statu)

    as select student.stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe,stu_statu,list_num,dormitory.dor_num,water,elect,repair,living,live_statu,Date,people_total,size,dor_statu,manager.mana_num,desk,chair,bed,light,tool_statu,mana_name,mana_gender,mana_age,mana_tele,mana_statu

    from student,lives,dormitory,tool,manager

    where student.stu_num=lives.stu_num

    and lives.dor_num=dormitory.dor_num

    and dormitory.dor_num=tool.dor_num

    and tool.mana_num= manager.mana_num ;

    学生信息视图:

    Select stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe,mana_name

    from allmass

    where stu_statu=1;

     

    管理员信息:

    create view manager_view

    as

    select manager.mana_num,mana_name,mana_age,mana_gender,mana_tele

    from manager

    where  mana_statu=1;

    宿舍信息:

    create view dormitory_view

    as

    select tool.dor_num,build_num,zone,people_total,size

    from tool,dormitory

    where tool.dor_num=dormitory.dor_num and dor_statu=1;

    物品信息:

    create view tool_view

    as

    select dor_num,mana_num, desk,chair,bed,light

    from tool

    where tool_statu=1;

    账单信息:

    create view lives_view

    as

    select list_num,stu_name,dor_num,water,elect,date,repair,living

    from lives,student

    where live_statu=1 and lives.stu_num=student.stu_num;

     

    3.6.3索引:

    每一张表通过主键的列产生索引,从而加快查询时的进度。

    拿学生信息表进行举例:

    Create index stu_index on student(stu_num);

    当然可以通过数据库自动生成。

     

    3.6.4触发器的定义:

    在学生表上建立触发器,记录被修改的信息。在原表中通过一个状态属性标示是否被删除,因此数据并不会真正被删除,只需要记录被修改的信息。

    create trigger on_pre_stu

    on student

    for update

    as

    begin

    declare @stu_num varchar(15)

    declare @pre_stu_name varchar(10)

    declare @pre_stu_gender varchar(2)

    declare @pre_stu_age int

    declare @pre_stu_tele varchar(15)

    declare @pre_stu_spe  varchar(20)

    select  @stu_num = stu_num from deleted

    select @pre_stu_name =stu_name from deleted

    select @pre_stu_gender =stu_gender from deleted

    select @pre_stu_age = stu_age from deleted

    select @pre_stu_tele =stu_tele from deleted

    select @pre_stu_spe = stu_spe from deleted

    insert into pre_stu(stu_num,pre_stu_name,pre_stu_gender,pre_stu_age,pre_stu_tele,pre_stu_spe )

    values(@stu_num,@pre_stu_name,@pre_stu_gender,@pre_stu_age,@pre_stu_tele,@pre_stu_spe)

    end

     

    在管理员上建立触发器,记录被修改的信息。在原表中通过一个状态属性标示是否被删除,因此数据并不会真正被删除,只需要记录被修改的信息。

     

    create trigger on_pre_mana

    on manager

    for update

    as

    begin

    declare @mana_num varchar(15)

    declare @pre_mana_name varchar(10)

    declare @pre_mana_gender varchar(2)

    declare @pre_mana_age int

    declare @pre_mana_tele varchar(15)

    select  @mana_num = mana_num from deleted

    select @pre_mana_name =mana_name from deleted

    select @pre_mana_gender =mana_gender from deleted

    select @pre_mana_age = mana_age from deleted

    select @pre_mana_tele =mana_tele from deleted

    insert

    into pre_mana(mana_num,pre_mana_name,pre_mana_gender,pre_mana_age,pre_mana_tele)values(@mana_num,@pre_mana_name,@pre_mana_gender,@pre_mana_age,@pre_mana_tele)

        end

    3.6.5用户的定义:

    create user dba for login dba with default_schema=dbo

    exec sp_addrolemember 'db_owner' ,'dba'

     

    3.6.6 对数据的管理:

    对数据的管理主要是由增删改查组成,以学生信息的管理为例,

    增加:

    insert into

    student(stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe,stu_statu)

    values('201677H0555','刘飞达','男',19,14646646465,'软工',1);

     

    删除:值得注意的是我删除信息用的是更新信息语句,只需要更改状态值即可标示数据是否被删除,数据不会真的被删除,做好了别分工作。

    update student set stu_status=0 where stu_num=’201677H0522’;

    修改:

    update student set stu_name='刘豪' where stu_num='201677H0522';

     

    查询:值得注意的是查询的条件是数据行的状态值是1,也就是被标示未被删除。

    select stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe from student where stu_statu=1;

     

    分别查询每一个宿舍的总费用,并且按照宿舍号进行排序(使用的是分组求和的思想):

    select dor_num , sum(w   ater+elect + repair +living) from lives group by dor_num order by dor_num ;

    在sql代码执行的过程中,会自动生成存储过程,将有价值的存储过程进行储存。

     

    3.7系统调试和测试

     

    在对数据库的备份功能进行测试的过程中,我在原表中对数据进行修改,从而触动触发器将被删除的信息储存在备份表中。执行语句update student set stu_name='刘豪' where stu_num='201677H0522'; 然后查看备份表中的信息,验证之后正确。

     

    把数据库总所有的信息联合起来,形成一张非常大的表,生成一个视图,测试之后,可以成功生成,满足要求。

    在安全性方面,我创建了用户并且进行了授权:

    create login dba with password='123456', default_database=stu_dor_manage;

    create user dba for login dba with default_schema=dbo

    exec sp_addrolemember 'db_owner' ,'dba'

    执行以后,成功生成了一个用户:测试成功!

    4.系统评价

    4.1我的系统特色:
    A、数据结构化 ,数据之间具有联系,面向整个系统。
    B、数据的共享性高,冗余度低,易扩充 。
    C、数据独立性高 。
    D、数据由DBMS统一管理和控制。

    4.2 系统不足及改进

    在对数据库进行设计的过程中,结构比较简单,不能够应对是否能复杂的情况,只能对学生住宿的简单信息进行操作。另外,在安全性方面做得也不够完善,主要原因在于设计的重点是功能的正常执行,而不是在每一个细节做到完美。另外,执行虚度方面没有做出专门的优化。因此,这个数据库系统需要我在以后相信的去完成每一个细节。

    5.设计心得

    在设计数据库的过程中我遇到过非常多的问题:

    首先,在设计阶段有非常多的数据项,当时觉得不好分类和处理,而且有很多的数据项和许多实体都有关系。最后通过查看课本例题,问同学等方式将各个数据项进行归类,对于和多个实体之间都有关系的数据项可以建立一个关系表,从而完成归类。

    接着,在添加数据的过程中,我忽略掉了数据的参照完整性,导致许多数据不能够正常加入。后来经过同学的提示,我将数据进行了统一分析,保持所有的数据一致,最后数据可以正常输入。

    最后,每个表中的数据更改完成之后,更改后的数据会丢失找不到了。对于这个问题就解决办法为加入触发器,记录表中信息的修改前的值,成功解决问题。

    收获:对于一个系统,数据库的设计是非常重要的,数据库设计决定了以后数据好不好维护。后期需求好不好展。同时也决定了系统的性能。一个坏的数据库设计一个功能点的改动可能会设计多张表的改动。一不小心可能就会引起数据的不一致。为了解决这些问题。在数据库设计之初就要考虑这些问题。减少后期系统维护量。

     

     

     

     

    展开全文
  • 数据库系统(DBS)是指一个计算机存储记录信息的系统,从管理层观点来看,数据库系统有四个主要部件构成,硬件,软件,...人员是指数据库系统的所有用户一般把数据库系统的用户分为4类,数据库管理员,系统分析员和...
  • 超市管理系统数据库设计

    千次阅读 2022-04-17 14:55:06
    超市管理系统数据库设计 设计背景 现如今,各个超市因为规模普遍较大,需要处理的商品数以千计,而且每天的进货和销售情况纷繁复杂,早时的记账方式已经无法满足已经步入信息化的时代。因此以计算机开发的软件系统...
  • 数据库 课程设计 仓库管理系统

    千次阅读 2021-07-26 16:33:34
    JAVA/数据库 课程设计 仓库管理系统 1问题描述 设计一个仓储管理系统,对仓库货品进行管理,出入库进行记录。主要功能包括,货品添加修改,出库、入库、库存查询等功能,现请你设计该系统。 2基本要求 数据库...
  • 数据库原理课程设计---停车场管理系统

    万次阅读 多人点赞 2020-12-15 11:39:45
    数据库原理课程设计---停车场管理系统 停车场收费管理系统是现代化停车场车辆收费及设备自动化管理的一个统称,是将停车场完全置于计算机统一管理下的高科技机电一体化产品。人们对停车场管理的要求越来越高,智能化...
  • 学生成绩管理系统 数据库设计

    千次阅读 2022-04-10 09:10:41
    学生成绩管理系统需求 成绩管理系统的主要功能模块包括: 学生成绩管理、院系管理、课程信息管理和成绩 信息管理,具体功能描述如下: 院系信息(系号,系名,电话)管理:录入、修改、查询 班级信息(班级号,人数...
  • 数据库管理系统属于应用软件吗?

    千次阅读 2021-07-01 02:56:37
    不,数据库管理系统属于系统软件。系统软件主要包括:操作系统,语言处理程序,数据库管理系统和服务程序等;而应用软件是为完成某些特定工作并解决某些特定问题而编写的程序,例如防病毒软件,办公软件等都是应用...
  • 数据库管理系统原理与设计 这个需要和其他四个连一起解压!!本书由于内容全面,实践性强,已经成为了数据库课程的首选教材。全书分为数据库基础、应用程序开发、存储与索引、查询评估、事务管理、数据库设计与调整...
  • 高校学籍管理系统(SQL Server数据库课程设计

    万次阅读 多人点赞 2021-12-22 10:55:07
    摘要: 高校的管理工作是一项复杂且系统化的工作。而随着当代社会积极响应国家“科教兴国”的战略。高校建设规模和招生人数每年均高不...运用高校学籍管理系统可以大大提高高校管理工作效率、方便系统维护、减小开支、
  • 数据库课程设计《SQL Server图书馆管理系统》(全) 免费下载地址:http://xiaolan.400gb.com/file/128965837 序言 1 一、图书馆管理系统 E-R 图 2 二、图书馆管理系统功能实现示意图 3 三、图书馆管理系统功能图例...
  • 一、数据库系统、数据库管理系统、数据库应用系统三者的区别 1.本质不同 数据库系统是一种软件系统,数据库管理系统本质就是一个软件,而数据库应用系统则是一个计算机应用系统 数据库系统是为适应数据处理的需要而...
  • 数据库和数据库管理系统的区别

    千次阅读 2021-07-12 21:55:25
    数据库和数据库管理系统的区别 主要区别是,性质不同、作用不同、功能不同,具体如下: 一、性质不同 1、数据库 数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可...
  • 学生管理系统数据库设计

    万次阅读 多人点赞 2021-07-04 15:48:15
    引言 科学技术的进步和生产的发展使人类知识总量的增长不断加快,生产社会...计算机用于管理信息处理的突出优点是迅速、准确、可靠、具有很大的存储能力,适应于管理信息量大、面宽的特点,适合于管理信息处理及时、准
  • 进销存系统数据库设计用Power Designer完成进销存管理信息系统数据库建模 包括CDM(E-R图)、PDM(关系模式图)和表清单,生成数据库(SQL 语句)
  • 数据库系统-数据库设计

    千次阅读 2022-04-11 17:47:49
    数据库系统-数据库设计 ...数据库设计应该和应用系统设计相结合 数据库设计方法 常用的数据库设计方法如下: 新奥尔良方法:将数据库设计分为若干阶段和步骤 基于E-R模型的设计方法:概念设计阶段广
  • 数据库学生成绩管理系统课程设计报告 数据库课程设计报告1.功能需求 本报告主要介绍学生成绩管理系统数据库设计,从需求分析到数据库的运行与维护都 进行详细的叙述。该系统是利用 SQL 开发出来的。通过 SQL 建立...
  • 数据库系统设计,实现和管理

    热门讨论 2014-04-28 19:14:41
    数据库系统设计,实现和管理 Database Systems Design, Implementation and Management Eig
  • 商品管理系统数据库设计--SQL Server

    万次阅读 多人点赞 2022-02-16 14:55:47
    1、学生成绩管理系统数据库设计–MySQL 学生成绩管理系统数据库设计–MySQL 2、医疗信息管理系统数据库–MySQL 医疗信息管理系统数据库–MySQL 3、邮件管理数据库设计–MySQL 邮件管理数据库设计–MySQL 4、SQL ...
  • 图书管理系统数据库设计

    万次阅读 多人点赞 2019-12-22 20:30:13
    实验八 图书管理系统数据库设计 一、实验学时 2学时 二、实验目的 (1)熟悉SQL Sever基本操作。 (2)利用T-SQL语句实现相关操作。 (3)通过完成从用户需求分析、概念结构设计,逻辑结构设计等一系列的数据库设计...
  • 工资管理系统数据库设计

    千次阅读 2021-03-04 19:04:39
    工资管理系统数据库设计 简单工资管理系统本项目一共包含12张表,如下表格所示: 表名 功能说明 EmployeeInfor 员工表 RoleSetting 员工角色设置表 SubsidySetting 补贴设置表 AttendanceSetting 考勤...
  • 数据库设计员工管理系统

    千次阅读 多人点赞 2021-12-04 18:41:34
    数据库原理课程设计,员工管理系统
  • 数据库(课程设计)报告(医院管理系统)数据库课程设计报告模版齐齐哈尔大学数据库课程设计报告题目:班级:姓名:学号:指导教师:2013医院信息管理系统摘要:医院作为一个极其重要的服务部门,其发展应适应计算机技术...
  • 教学管理系统从功能来说,主要是针对高校的信息化管理系统,协助教务管理人员完成日常工作任务重的项目,涉及学生信息管理、教师管理和成绩管理等项目。它利用计算机在处理、保存数据方面的优势,帮助教学工作人员...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 802,756
精华内容 321,102
关键字:

数据库管理系统设计