文档库 最新最全的文档下载
当前位置:文档库 › 《数据库原理课程设计》

《数据库原理课程设计》

数据库原理课程设计报告

一、需求分析

此工资管理数据库针对一些中小型企业而建立的,主要是方便企业的管理,并进行工资的发放管理。

数据库实现的五大主要功能:

1、数据增加功能

(1)员工基本信息的输入:员工编号、姓名、性别、年龄、部门、职务参加工作时间、政治面貌。

(2)员工工资信息的输入:实发工资、应发工资、职务津贴、奖罚金额。

(3)企业部门信息的输入:部门编号、部门名称、部门主管、部门人数。

2、数据删除功能

数据的删除只有管理员才有此权限,当员工不在该企业工作,管理员对其信息进行级联删除,即删除员工与该企业相关的信息。当部门被撤销是,管理员可以对其信息进行删除等。

3、数据修改功能

(1)当企业人员的信息发生变化,如职称的改变、工作部门的变动、工资的变化、调离本单位等,管理员应能够修改员工的信息或将其从员工信息表中删除,员工也可以自己修改自己的信息。

(2)当一个部门的名称发生改变时,企业中所有该项部门的名称应一致的改变,即级联修改。

(3)当工资选项有所改变时,工资实体的属性应该相应的变化。

4、数据查询功能

当管理员和员工登录系统时都可以进行数据的查询,管理员可以对系统的一切信息进行查询,但是员工制可以查询自己的信息,以及所在部门的信息。

二、概念结构设计

(1)员工实体及属性 (2)部门实体及属性

(3)出勤实体及属性 (4)津贴实体及属性

(5)工资实体及属性

(6)实体及其联系图

三、逻辑结构设计

1.数据字典的建立以及数据库和表的建立

(1)员工关系表的数据字典:

建立员工关系表的SQL语句截图

(2)员工部门表的数据字典

建立员工部门表的SQL语句截图

(3)出勤表的数据字典

建立出勤表的SQL语句截图

(4)津贴表的数据字典

建立津贴表的SQL语句截图

(5)工资表的数据字典

建立工资表的SQL语句截图

(6)工资管理数据库建立的SQL语句及建立好的数据库截图

2.视图的建立

(1)建立名为EmployeeIDView的视图,限制条件为员工号为:200215121

(2)建立名为PracticalSalaryView的视图,限制条件为员工号为:200215121,实发工资大于1500员

3.对员工信息表、部门信息表、工资表的部分属性建立唯一索引

四、数据库的安全性和完整性

1.创建角色,名称为1108060211,1108060210

2.创建新的用户,用户名为wurongchao

安全性与完整性方面的要求:针对不同的用户设计使用权限,角色等,根据需要设计触发器,用截图的方式给出安全性和完整性的设计情况。

3.触发器的设计

创建触发器,员工表中删除一条信息,其他表相应员工信息删除

五、查询效果演示

1.数据的插入

(1)向员工信息表中插入

(2)向部门信息表中插入

(3)向出勤表中插入

(4)向津贴表中插入

(5)向工资表中插入

2数据的查询

(1)统计所有部门员工总数

(2)查询销售部门所有成员的名字,所在的部门以及相应的部门主管的名字

(3)查询员工实发工资小于元的员工姓名、及所在的部门

(4)查询出勤天数大于天性别为女的员工姓名、员工编号、所在部门及奖罚金额

3.数据的修改

(1)将员工编号为200215123所在的部门改为销售部

(2)将所有员工的基本工资上调元

4.数据的删除

(1)删除员工编号为的员工信息

由图可知,当要被删除的属性被其他表的参照时不能直接对其进行删除,否则删除不成功,应先删除参照该表的所对应的的属性值

(2)删除部门编号为的员工信息

六、课程设计心得

此次课程设计确实学学到了很多东西,尤其是距离考试已经过去一个多月了,所学的东西好多都已经忘了,刚开始做的时候感觉蛮吃力的,总感觉下代码模模糊糊的,貌似正确但实际运行起来却又有很多错误,就连当初感觉最简单的查询都感到很陌生,后来就通过不断地翻书查资料,慢慢把熟悉的功能代码记忆起来,同时我们又遇上了上课期间没有遇到的问题,每每解决一个问题,就有一种小小的成就感,使信心一步一步地增加,虽然这次做的课程设计用到的知识并不多,复杂度也不高,但是我想这是我们必须经历的一小步,将每一小步慢慢积累将会在我们的学习之路上跨越一大步,这就是成功的关键。

七、实验SQL代码

USE MASTER;

GO

IF EXISTS(SELECT*FROM SYSDA TABASES WHERE name='GZGL')--查询数据库

DROP DA TABASE GZGL;

GO

CREATE DATABASE GZGL;--创建数据库

GO

IF EXISTS(SELECT*FROM SYSOBJECTS WHERE name='Department')--查询表是否存在DROP TABLE Department;

GO

CREATE TABLE Department--建立部门表

(

DepartmentId VARCHAR(4)PRIMARY KEY,--部门编号

DepartmentName V ARCHAR(20)UNIQUE NOT NULL,--部门名称

DepartmentZhuguan V ARCHAR(20),--部门主管

DepartmentRenshu INT--部门人数

);

GO

IF EXISTS(SELECT*FROM SYSOBJECTS WHERE name='Employee')

DROP TABLE Employee;

GO

CREATE TABLE Employee--建立员工信息表

(

EmployeeId VARCHAR(10)PRIMARY KEY,--员工编号

EmployeeName VARCHAR(20)NOT NULL,--员工姓名

CONSTRAINT CK_EmployeeNameLength CHECK (LEN(EmployeeName)<=25 AND LEN(EmployeeName)>=2),

EmployeeSex V ARCHAR(4)DEFAULT('男')NOT NULL,--员工性别

CONSTRAINT CK_SexRange CHECK (EmployeeSex IN('男','女')),

EmployeeAge INT CHECK (EmployeeAge BETWEEN 18 AND 60),--员工年龄EmployeePos VARCHAR(20),--员工职务

EmployeeDept V ARCHAR(20),--员工部门

EmployeeStatus VARCHAR(10),--员工政治面貌

StartData INT--参加工作时间

);

GO

IF EXISTS(SELECT*FROM SYSOBJECTS WHERE name='Chuqin')

DROP TABLE Chuqin;

GO

CREATE TABLE Chuqin--建立出勤表

(

EmployeeID VARCHAR(10),--员工编号

WorkMonth INT CHECk (WorkMonth BETWEEN 0 AND 31),--工作月份

Workdays INT,--出勤天数

JFMoney MONEY,--奖罚金额

CONSTRAINT ChuqinPK PRIMARY KEY (EmployeeID,WorkMonth),

CONSTRAINT ChuqinFK FOREIGN KEY(EmployeeID)REFERENCES Employee(EmployeeID)

);

GO

IF EXISTS(SELECT*FROM SYSOBJECTS WHERE name='Allowance')

DROP TABLE Allowance;

GO

CREATE TABLE Allowance--建立津贴表

(

EmployeeID VARCHAR(10),--员工编号

WorkMonth INT CHECk (WorkMonth BETWEEN 0 AND 31),--工作月份

StayUpDays INT,--加班天数

JTMoney MONEY,--津贴金额

CONSTRAINT AllowancePK PRIMARY KEY (EmployeeID,WorkMonth),

CONSTRAINT AllowanceFK FOREIGN KEY(EmployeeID)REFERENCES Employee(EmployeeID)

);

GO

IF EXISTS(SELECT*FROM SYSOBJECTS WHERE name='Salary')

DROP TABLE Salary;

GO

CREATE TABLE Salary--建立工资表

(

EmployeeID VARCHAR(10)PRIMARY KEY,--员工编号

BaseSalary MONEY,--基本工资

PracticalSalary MONEY,--实发工资

JFMoney MONEY,--奖罚金额

JTMoney MONEY,--津贴金额

CONSTRAINT SalaryFK FOREIGN KEY(EmployeeID)REFERENCES Employee(EmployeeID)

);

GO

--建立员工信息的视图

CREATE VIEW EmployeeIDView

AS

SELECT*

FROM Employee

WHERE EmployeeID='200215121';

--建立工资信息的视图

CREATE VIEW PracticalSalaryView

AS

SELECT*

FROM Salary

WHERE EmployeeID='200215121'AND PracticalSalary>1500;

--对员工信息表的员工编号建立唯一索引,并按升序排列

CREATE UNIQUE INDEX EmployeeIDIndex ON Employee(EmployeeID ASC);

--对部门信息表的部门编号建立唯一索引,并按升序排列

CREATE UNIQUE INDEX DepartmentIDIndex ON Department(DepartmentID ASC);

--对工资表的员工编号和实发工资建立唯一索引,并按员工编号升序排列,实发工资降序排列

CREATE UNIQUE INDEX GZIndex ON Salary(EmployeeID ASC,PracticalSalary DESC);

--向员工表插入数据,插入数据顺序如下

--编号、姓名、性别、年龄、职务、部门、政治面貌、参加工作时间

INSERT INTO Employee V ALUES('200215121','李勇','男','20','一般员工','市场部','党员','20130704');

INSERT INTO Employee V ALUES('200215122','刘晨','女','19','一般员工','销售部','团员','20130704');

INSERT INTO Employee V ALUES('200215123','王敏','女','18','一般员工','公关部','党员','20130704');

INSERT INTO Employee V ALUES('200215125','张立','男','19','一般员工','宣传部','党员','20130704');

GO

--向部门表插入数据,插入数据顺序如下

--编号、名称、主管、人数

INSERT INTO Department V ALUES('0001','市场部','钟灵','15');

INSERT INTO Department V ALUES('0002','销售部','杨毅','20');

INSERT INTO Department V ALUES('0003','公关部','周倩','8');

INSERT INTO Department V ALUES('0004','宣传部','陈文茂','10');

GO

--向出勤表插入数据,插入数据顺序如下

--员工编号、工作月份、出勤天数、奖罚金额

INSERT INTO Chuqin V ALUES('200215121','7','30','100');

INSERT INTO Chuqin V ALUES('200215122','7','25','-150');

INSERT INTO Chuqin V ALUES('200215123','7','20','-500');

INSERT INTO Chuqin V ALUES('200215125','7','27','-50');

GO

--向津贴表插入数据,插入数据顺序如下

--员工编号、工作月份、加班天数、津贴金额

INSERT INTO Allowance V ALUES('200215121','7','2','100');

INSERT INTO Allowance V ALUES('200215122','7','0','0');

INSERT INTO Allowance V ALUES('200215123','7','0','0');

INSERT INTO Allowance V ALUES('200215125','7','0','0');

GO

--向工资表插入数据,插入数据顺序如下

--员工编号、基本工资、实发工资、奖罚金额、津贴金额

INSERT INTO Salary VALUES('200215121','1500','1700','100','100');

INSERT INTO Salary VALUES('200215122','1500','1350','-150','0');

INSERT INTO Salary VALUES('200215123','1500','1000','-500','0');

INSERT INTO Salary VALUES('200215125','1500','1450','-50','0');

GO

--创建触发器,员工表中删除一条信息,其他表相应员工信息删除

CREATE TRIGGER NumberOne ON Employee

FOR DELETE

AS

DELETE FROM Chuqin WHERE EmployeeID IN(SELECT EmployeeID FROM DELETED) DELETE FROM Allowance WHERE EmployeeID IN(SELECT EmployeeID FROM DELETED)

DELETE FROM Salary WHERE EmployeeID IN(SELECT EmployeeID FROM DELETED) --验证触发器的有效性

--DELETE FROM Employee WHERE EmployeeID='200215121';

--(1)统计所有部门员工总数

SELECT COUNT(DISTINCT EmployeeID)员工总数FROM Employee;

--(2)查询销售部门所有成员的名字,所在的部门以及相应的部门主管的名字

SELECT EmployeeName,DepartmentName,DepartmentZhuguan

FROM Employee,Department

WHERE EmployeeDept=DepartmentName;

--(3)查询员工实发工资小于元的员工姓名、及所在的部门

SELECT EmployeeName,EmployeeDept

FROM Employee,Salary

WHERE Employee.EmployeeID=Salary.EmployeeID AND PracticalSalary<1400;

--(4)查询出勤天数大于天性别为女的员工姓名、员工编号、所在部门及奖罚金额SELECT EmployeeName员工姓名,Employee.EmployeeID员工编号,EmployeeDept员工部门,JFMoney奖罚金额

FROM Employee,CHuqin

WHERE Employee.EmployeeID=Chuqin.EmployeeID AND WorkDays>25;

--(1)将员工编号为所在的部门改为销售部

UPDATE Employee SET EmployeeDept='销售部'WHERE EmployeeID='200215123';

--(2)将所有员工的基本工资上调元

UPDATE Salary SET BaseSalary=BaseSalary+500;

--(1)删除员工编号为的员工信息

DELETE FROM Employee WHERE EmployeeID='200215125';

--(2)删除部门编号为的员工信息

DELETE FROM Department WHERE DepartmentID='0004';

相关文档