标题:MIS 数据库设计上机报告
一、引言
随着信息技术的飞速发展,数据库管理系统在企业管理和信息处理中扮演着越来越重要的角色,本报告将详细介绍一个基于 MIS 数据库的设计过程,包括需求分析、概念结构设计、逻辑结构设计和物理结构设计等阶段,通过本次上机实践,我们深入了解了数据库设计的基本原则和方法,提高了自己的数据库设计能力和实践操作能力。
二、需求分析
(一)业务背景
本系统是一个企业管理信息系统,主要用于管理企业的客户信息、产品信息、订单信息和员工信息等,系统需要能够实现客户信息的录入、查询、修改和删除,产品信息的录入、查询、修改和删除,订单信息的录入、查询、修改和删除,以及员工信息的录入、查询、修改和删除等功能。
(二)数据需求
根据业务需求,我们可以确定系统需要管理以下数据:
1、客户信息:包括客户编号、客户名称、客户地址、客户电话和客户邮箱等。
2、产品信息:包括产品编号、产品名称、产品价格、产品库存和产品描述等。
3、订单信息:包括订单编号、客户编号、产品编号、订单数量、订单金额和订单日期等。
4、员工信息:包括员工编号、员工姓名、员工性别、员工年龄、员工职位和员工工资等。
(三)功能需求
根据业务需求,我们可以确定系统需要实现以下功能:
1、客户信息管理:能够实现客户信息的录入、查询、修改和删除等功能。
2、产品信息管理:能够实现产品信息的录入、查询、修改和删除等功能。
3、订单信息管理:能够实现订单信息的录入、查询、修改和删除等功能。
4、员工信息管理:能够实现员工信息的录入、查询、修改和删除等功能。
5、报表生成:能够根据客户信息、产品信息、订单信息和员工信息等生成相应的报表。
三、概念结构设计
(一)E-R 图设计
根据需求分析,我们可以绘制出系统的 E-R 图,E-R 图是一种用于描述数据库概念结构的图形工具,它通过实体、属性和关系等元素来表示数据库中的数据和数据之间的联系。
(二)E-R 图转换为关系模式
将 E-R 图转换为关系模式是数据库设计的重要步骤之一,关系模式是一种用于描述数据库逻辑结构的数学模型,它通过关系、属性和域等元素来表示数据库中的数据和数据之间的联系。
根据 E-R 图,我们可以将其转换为以下关系模式:
1、客户(客户编号,客户名称,客户地址,客户电话,客户邮箱)
2、产品(产品编号,产品名称,产品价格,产品库存,产品描述)
3、订单(订单编号,客户编号,产品编号,订单数量,订单金额,订单日期)
4、员工(员工编号,员工姓名,员工性别,员工年龄,员工职位,员工工资)
四、逻辑结构设计
(一)关系模式规范化
关系模式规范化是数据库设计的重要步骤之一,关系模式规范化的目的是消除关系模式中的冗余和异常,提高关系模式的性能和可靠性。
根据关系模式,我们可以对其进行规范化处理,得到以下关系模式:
1、客户(客户编号,客户名称,客户地址,客户电话,客户邮箱)
2、产品(产品编号,产品名称,产品价格,产品库存,产品描述)
3、订单(订单编号,客户编号,产品编号,订单数量,订单金额,订单日期)
4、员工(员工编号,员工姓名,员工性别,员工年龄,员工职位,员工工资)
(二)索引设计
索引是一种用于提高数据库查询性能的数据库对象,在数据库设计中,我们需要根据查询需求和数据特点,合理地设计索引,以提高数据库的查询性能。
根据查询需求和数据特点,我们可以对以下字段建立索引:
1、客户(客户编号,客户名称,客户地址,客户电话,客户邮箱):客户编号
2、产品(产品编号,产品名称,产品价格,产品库存,产品描述):产品编号
3、订单(订单编号,客户编号,产品编号,订单数量,订单金额,订单日期):订单编号,客户编号,产品编号
4、员工(员工编号,员工姓名,员工性别,员工年龄,员工职位,员工工资):员工编号
五、物理结构设计
(一)存储结构设计
存储结构是指数据库在磁盘上的存储方式,在数据库设计中,我们需要根据数据库的特点和查询需求,合理地设计存储结构,以提高数据库的查询性能。
根据数据库的特点和查询需求,我们可以采用以下存储结构:
1、客户(客户编号,客户名称,客户地址,客户电话,客户邮箱):采用 B 树索引存储客户编号,采用堆存储客户其他信息。
2、产品(产品编号,产品名称,产品价格,产品库存,产品描述):采用 B 树索引存储产品编号,采用堆存储产品其他信息。
3、订单(订单编号,客户编号,产品编号,订单数量,订单金额,订单日期):采用 B 树索引存储订单编号,采用 B 树索引存储客户编号,采用 B 树索引存储产品编号,采用堆存储订单其他信息。
4、员工(员工编号,员工姓名,员工性别,员工年龄,员工职位,员工工资):采用 B 树索引存储员工编号,采用堆存储员工其他信息。
(二)日志文件设计
日志文件是用于记录数据库操作的文件,在数据库设计中,我们需要根据数据库的特点和查询需求,合理地设计日志文件,以提高数据库的恢复性能。
根据数据库的特点和查询需求,我们可以采用以下日志文件设计:
1、采用redo 日志记录数据库的修改操作:redo 日志是用于记录数据库修改操作的日志文件,在数据库修改操作时,系统会将修改操作记录到 redo 日志中,以便在数据库恢复时能够恢复到修改前的状态。
2、采用undo 日志记录数据库的回滚操作:undo 日志是用于记录数据库回滚操作的日志文件,在数据库回滚操作时,系统会将回滚操作记录到 undo 日志中,以便在数据库恢复时能够恢复到回滚前的状态。
六、数据库实施
(一)创建数据库
在数据库管理系统中,我们可以使用 SQL 语句创建数据库,以下是创建数据库的 SQL 语句:
CREATE DATABASE mis_database;
(二)创建表
在数据库管理系统中,我们可以使用 SQL 语句创建表,以下是创建表的 SQL 语句:
CREATE TABLE customer ( customer_id INT PRIMARY KEY, customer_name VARCHAR(50), customer_address VARCHAR(100), customer_phone VARCHAR(20), customer_email VARCHAR(50) ); CREATE TABLE product ( product_id INT PRIMARY KEY, product_name VARCHAR(50), product_price DECIMAL(10, 2), product_stock INT, product_description VARCHAR(200) ); CREATE TABLE order ( order_id INT PRIMARY KEY, customer_id INT, product_id INT, order_quantity INT, order_amount DECIMAL(10, 2), order_date DATE, FOREIGN KEY (customer_id) REFERENCES customer(customer_id), FOREIGN KEY (product_id) REFERENCES product(product_id) ); CREATE TABLE employee ( employee_id INT PRIMARY KEY, employee_name VARCHAR(50), employee_gender VARCHAR(10), employee_age INT, employee_position VARCHAR(50), employee_salary DECIMAL(10, 2) );
(三)插入数据
在数据库管理系统中,我们可以使用 SQL 语句插入数据,以下是插入数据的 SQL 语句:
INSERT INTO customer (customer_id, customer_name, customer_address, customer_phone, customer_email) VALUES (1, '张三', '北京市朝阳区', '13812345678', 'zhangsan@163.com'); INSERT INTO product (product_id, product_name, product_price, product_stock, product_description) VALUES (1, '笔记本电脑', 5999.00, 100, '高性能笔记本电脑'); INSERT INTO order (order_id, customer_id, product_id, order_quantity, order_amount, order_date) VALUES (1, 1, 1, 1, 5999.00, '2023-01-01'); INSERT INTO employee (employee_id, employee_name, employee_gender, employee_age, employee_position, employee_salary) VALUES (1, '李四', '男', 30, '经理', 10000.00);
(四)创建视图
在数据库管理系统中,我们可以使用 SQL 语句创建视图,以下是创建视图的 SQL 语句:
CREATE VIEW customer_view AS SELECT customer_id, customer_name, customer_address, customer_phone, customer_email FROM customer; CREATE VIEW product_view AS SELECT product_id, product_name, product_price, product_stock, product_description FROM product; CREATE VIEW order_view AS SELECT order_id, customer_id, product_id, order_quantity, order_amount, order_date FROM order; CREATE VIEW employee_view AS SELECT employee_id, employee_name, employee_gender, employee_age, employee_position, employee_salary FROM employee;
(五)创建存储过程
在数据库管理系统中,我们可以使用 SQL 语句创建存储过程,以下是创建存储过程的 SQL 语句:
CREATE PROCEDURE sp_insert_customer @customer_name VARCHAR(50), @customer_address VARCHAR(100), @customer_phone VARCHAR(20), @customer_email VARCHAR(50) AS BEGIN INSERT INTO customer (customer_name, customer_address, customer_phone, customer_email) VALUES (@customer_name, @customer_address, @customer_phone, @customer_email); END CREATE PROCEDURE sp_insert_product @product_name VARCHAR(50), @product_price DECIMAL(10, 2), @product_stock INT, @product_description VARCHAR(200) AS BEGIN INSERT INTO product (product_name, product_price, product_stock, product_description) VALUES (@product_name, @product_price, @product_stock, @product_description); END CREATE PROCEDURE sp_insert_order @customer_id INT, @product_id INT, @order_quantity INT, @order_amount DECIMAL(10, 2), @order_date DATE AS BEGIN INSERT INTO order (customer_id, product_id, order_quantity, order_amount, order_date) VALUES (@customer_id, @product_id, @order_quantity, @order_amount, @order_date); END CREATE PROCEDURE sp_insert_employee @employee_name VARCHAR(50), @employee_gender VARCHAR(10), @employee_age INT, @employee_position VARCHAR(50), @employee_salary DECIMAL(10, 2) AS BEGIN INSERT INTO employee (employee_name, employee_gender, employee_age, employee_position, employee_salary) VALUES (@employee_name, @employee_gender, @employee_age, @employee_position, @employee_salary); END
(六)创建触发器
在数据库管理系统中,我们可以使用 SQL 语句创建触发器,以下是创建触发器的 SQL 语句:
CREATE TRIGGER tr_insert_customer ON customer AFTER INSERT AS BEGIN INSERT INTO customer_view (customer_id, customer_name, customer_address, customer_phone, customer_email) SELECT customer_id, customer_name, customer_address, customer_phone, customer_email FROM inserted; END CREATE TRIGGER tr_insert_product ON product AFTER INSERT AS BEGIN INSERT INTO product_view (product_id, product_name, product_price, product_stock, product_description) SELECT product_id, product_name, product_price, product_stock, product_description FROM inserted; END CREATE TRIGGER tr_insert_order ON order AFTER INSERT AS BEGIN INSERT INTO order_view (order_id, customer_id, product_id, order_quantity, order_amount, order_date) SELECT order_id, customer_id, product_id, order_quantity, order_amount, order_date FROM inserted; END CREATE TRIGGER tr_insert_employee ON employee AFTER INSERT AS BEGIN INSERT INTO employee_view (employee_id, employee_name, employee_gender, employee_age, employee_position, employee_salary) SELECT employee_id, employee_name, employee_gender, employee_age, employee_position, employee_salary FROM inserted; END
七、数据库测试
(一)功能测试
在数据库管理系统中,我们可以使用 SQL 语句对数据库进行功能测试,以下是功能测试的 SQL 语句:
-- 查询客户信息 SELECT * FROM customer_view; -- 查询产品信息 SELECT * FROM product_view; -- 查询订单信息 SELECT * FROM order_view; -- 查询员工信息 SELECT * FROM employee_view; -- 插入客户信息 EXEC sp_insert_customer '王五', '上海市浦东新区', '13912345678', 'wangwu@163.com'; -- 插入产品信息 EXEC sp_insert_product '平板电脑', 3999.00, 200, '高性能平板电脑'; -- 插入订单信息 EXEC sp_insert_order 2, 2, 2, 7998.00, '2023-01-02'; -- 插入员工信息 EXEC sp_insert_employee '赵六', '女', 28, '主管', 8000.00;
(二)性能测试
在数据库管理系统中,我们可以使用性能测试工具对数据库进行性能测试,以下是性能测试的步骤:
1、打开性能测试工具。
2、连接到数据库。
3、选择测试场景。
4、运行测试。
5、分析测试结果。
八、数据库维护
(一)备份数据库
在数据库管理系统中,我们可以使用备份工具对数据库进行备份,以下是备份数据库的步骤:
1、打开备份工具。
2、选择备份类型。
3、选择备份设备。
4、选择备份选项。
5、运行备份。
(二)恢复数据库
在数据库管理系统中,我们可以使用恢复工具对数据库进行恢复,以下是恢复数据库的步骤:
1、打开恢复工具。
2、选择恢复类型。
3、选择恢复设备。
4、选择恢复选项。
5、运行恢复。
九、结论
通过本次上机实践,我们深入了解了数据库设计的基本原则和方法,提高了自己的数据库设计能力和实践操作能力,我们也认识到数据库设计是一个复杂的过程,需要综合考虑各种因素,如数据需求、业务流程、性能要求等,在今后的学习和工作中,我们将继续努力,不断提高自己的数据库设计能力和水平。
评论列表