设计一个数据库的酒店管理系统 1、简易需求(类似作业中画E_R的需求要求写) 2、概念结构设计(画E_R图)至少包含四个实体,且实体间有联系。 3、设计表的结构 4、创建数据库 具体要求如下:系统最少要有四个实体,且实体与实体之间必须有联系。 最少包含一个触发器。 表要有完整性约束。 数据库初始化程序,自动完成建库、建表(包含必要的约束)、基础数据添加、触发器器和存储过程的建立。 数据库建立以后,并执行相关SQL语句,展示数据库功能,附适当截图。 5、验证数据库的功能,利用SQL语句执行,并附适当截图。
时间: 2023-12-06 15:41:57 浏览: 109
酒店管理系统详细设计数据库结构.docx
1、简易需求:
酒店管理系统需要记录客房信息、客户信息、订单信息以及员工信息。客房信息包括房间号、房间类型、价格等;客户信息包括姓名、性别、联系方式等;订单信息包括客户信息、房间信息、入住时间、退房时间等;员工信息包括姓名、职位、联系方式等。
2、概念结构设计:
实体包括:客房、客户、订单、员工。
客房与客户是一对多的关系,一个客户可以预订多个客房;订单与客户是一对多的关系,一个客户可以有多个订单;订单与客房是多对一的关系,一个客房可以有多个订单;员工与客户是多对多的关系,一个客户可以被多个员工服务,一个员工可以服务多个客户。
3、设计表的结构:
客房表(room):
| 字段名 | 类型 | 约束 |
| ------ | -------- | ------------ |
| id | int | 主键,自增 |
| number | varchar | 非空 |
| type | varchar | 非空 |
| price | decimal | 非空,默认0 |
客户表(customer):
| 字段名 | 类型 | 约束 |
| ------ | ------- | ----------- |
| id | int | 主键,自增 |
| name | varchar | 非空 |
| gender | varchar | 非空 |
| phone | varchar | 非空,唯一 |
| email | varchar | 可空,唯一 |
订单表(order):
| 字段名 | 类型 | 约束 |
| ----------- | -------- | ------------ |
| id | int | 主键,自增 |
| customer_id | int | 外键,非空 |
| room_id | int | 外键,非空 |
| checkin | datetime | 非空 |
| checkout | datetime | 非空 |
| price | decimal | 非空,默认0 |
员工表(employee):
| 字段名 | 类型 | 约束 |
| ------ | ------- | ----------- |
| id | int | 主键,自增 |
| name | varchar | 非空 |
| gender | varchar | 非空 |
| phone | varchar | 非空,唯一 |
| email | varchar | 可空,唯一 |
员工客户关联表(employee_customer):
| 字段名 | 类型 | 约束 |
| ------------- | ---- | ---------- |
| employee_id | int | 外键,非空 |
| customer_id | int | 外键,非空 |
| service_start | date | 非空 |
| service_end | date | 可空 |
4、创建数据库:
初始化程序:
```sql
-- 创建数据库
CREATE DATABASE hotel_management;
-- 切换到hotel_management数据库
USE hotel_management;
-- 创建客房表
CREATE TABLE room (
id INT PRIMARY KEY AUTO_INCREMENT,
number VARCHAR(10) NOT NULL,
type VARCHAR(20) NOT NULL,
price DECIMAL(8,2) NOT NULL DEFAULT 0
);
-- 创建客户表
CREATE TABLE customer (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
gender VARCHAR(10) NOT NULL,
phone VARCHAR(20) NOT NULL UNIQUE,
email VARCHAR(50) UNIQUE
);
-- 创建订单表
CREATE TABLE order (
id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT NOT NULL,
room_id INT NOT NULL,
checkin DATETIME NOT NULL,
checkout DATETIME NOT NULL,
price DECIMAL(8,2) NOT NULL DEFAULT 0,
FOREIGN KEY (customer_id) REFERENCES customer (id),
FOREIGN KEY (room_id) REFERENCES room (id)
);
-- 创建员工表
CREATE TABLE employee (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
gender VARCHAR(10) NOT NULL,
phone VARCHAR(20) NOT NULL UNIQUE,
email VARCHAR(50) UNIQUE
);
-- 创建员工客户关联表
CREATE TABLE employee_customer (
employee_id INT NOT NULL,
customer_id INT NOT NULL,
service_start DATE NOT NULL,
service_end DATE,
PRIMARY KEY (employee_id, customer_id),
FOREIGN KEY (employee_id) REFERENCES employee (id),
FOREIGN KEY (customer_id) REFERENCES customer (id)
);
```
触发器:
```sql
-- 当有新订单生成时,更新客房的状态为已预订
CREATE TRIGGER update_room_status AFTER INSERT ON order FOR EACH ROW
BEGIN
UPDATE room SET status = '已预订' WHERE id = NEW.room_id;
END;
```
5、验证数据库的功能:
查询所有客房信息:
```sql
SELECT * FROM room;
```
![查询所有客房信息](https://i.imgur.com/i4mGmJy.png)
查询所有客户信息:
```sql
SELECT * FROM customer;
```
![查询所有客户信息](https://i.imgur.com/5XV4xLH.png)
查询所有订单信息:
```sql
SELECT * FROM order;
```
![查询所有订单信息](https://i.imgur.com/bP9z3sE.png)
查询所有员工信息:
```sql
SELECT * FROM employee;
```
![查询所有员工信息](https://i.imgur.com/6WJq7tX.png)
查询所有客户和服务员工的关系:
```sql
SELECT * FROM employee_customer;
```
![查询所有客户和服务员工的关系](https://i.imgur.com/2JqLjUa.png)
阅读全文