数据库设计宾馆客房管理系统
时间: 2024-12-30 22:19:27 浏览: 11
### 宾馆客房管理系统数据库设计方案
#### 设计原则
在设计宾馆客房管理系统的数据库时,需遵循规范化理论来确保数据的一致性和完整性。考虑到系统涉及多个实体及其关系,应合理规划表结构以支持高效的查询和事务处理。
#### 实体识别与属性定义
基于业务需求分析,主要存在以下几个核心实体:
- **用户 (User)**:包含基本信息如用户名、密码、联系方式等。
- **员工 (Staff)**:记录工作人员详情以及权限级别。
- **客房类型 (RoomType)**:描述不同类型的房间特征,比如标准间、豪华套房等。
- **客房信息 (RoomInfo)**:具体某一个房间的状态及相关参数。
- **预订记录 (ReservationRecord)**:保存顾客预定的历史资料。
- **入住登记 (CheckInRecord)**:反映客人实际入住房间的事实。
- **账单明细 (BillDetail)**:用于财务统计的消费项目列表。
每种实体都对应着特定的数据字段集合,在创建相应表格之前要先明确各字段名称及类型。
#### 表结构说明
##### 用户表 `tb_user`
| 字段名 | 类型 | 描述 |
|------------|-------------|--------------|
| user_id | INT PRIMARY KEY AUTO_INCREMENT | 自增主键 |
| username | VARCHAR(50) NOT NULL UNIQUE | 登录账号 |
| password | CHAR(64) NOT NULL | 密码哈希值 |
| phone_num | VARCHAR(20) | 手机号码 |
此部分的设计考虑到了用户的唯一标识,并且加入了电话作为辅助验证手段[^1]。
##### 员工表 `tb_staff`
| 字段名 | 类型 | 描述 |
|---------------|----------------|----------------|
| staff_id | INT PRIMARY KEY AUTO_INCREMENT | 自增主键 |
| name | VARCHAR(50) NOT NULL | 名字 |
| position | ENUM('manager', 'clerk') | 职位类别 |
| hire_date | DATE | 雇佣日期 |
这里区分了管理层和其他职员的身份差异以便于权限控制[^3]。
##### 客房类型表 `tb_room_type`
| 字段名 | 类型 | 描述 |
|--------------|-------------------|--------------------|
| type_code | TINYINT UNSIGNED PRIMARY KEY | 编号 |
| description | TEXT | 对该类别的文字介绍 |
| base_price | DECIMAL(8, 2) | 单价(元/晚) |
针对不同类型制定了基础价格体系,方便后续计算费用[^5]。
##### 客房信息表 `tb_room_info`
| 字段名 | 类型 | 描述 |
|--|------------------------|----------------------|
| room_number | SMALLINT UNSIGNED PRIMARY KEY | 房间编号 |
| floor | TINYINT UNSIGNED | 层次 |
| status | ENUM('available', 'booked', 'occupied', 'cleaning') | 当前状态 |
| type_code | TINYINT UNSIGNED FOREIGN KEY REFERENCES tb_room_type(type_code)| 关联客房类型|
明确了每个房间的具体位置和服务状况,同时也建立了与其他表之间的外键关联。
##### 预订记录表 `tb_reservation_record`
| 字段名 | 类型 | 描述 |
|------------|
| reservation_id | BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT | 订单ID |
| user_id | INT UNSIGNED FOREIGN KEY REFERENCES tb_user(user_id) | 下订单的人 |
| check_in_date | DATE | 入住时间 |
| nights | TINYINT UNSIGNED | 夜数 |
| total_amount | DECIMAL(9, 2) | 总金额 |
| payment_status| ENUM('unpaid', 'partially_paid', 'fully_paid') | 支付情况 |
记录完整的交易过程并跟踪支付进度,有助于财务管理。
##### 入住登记表 `tb_checkin_record`
| 字段名 | 类型 | 描述 |
|---------------|-------------------------------|------------------------------|
| record_id | BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT | 流水号 |
| reservation_id| BIGINT UNSIGNED FOREIGN KEY REFERENCES tb_reservation_record(reservation_id) | 对应的预订单号 |
| actual_checkin_time | DATETIME | 真实办理入住的时间戳 |
| checkout_time | DATETIME | 结束离店时刻 |
精确捕捉每一次入住事件的发生时间和结束时间,对于资源调度非常重要。
##### 账单明细表 `tb_bill_detail`
| 字段名 | 类型 | 描述 |
|---------------|------------------------------------|------------------------------------|
| bill_item_id | BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT | 明细项ID |
| record_id | BIGINT UNSIGNED FOREIGN KEY REFERENCES tb_checkin_record(record_id) | 归属哪条入住记录 |
| item_name | VARCHAR(100) NOT NULL | 商品或服务项目的名称 |
| quantity | SMALLINT UNSIGNED DEFAULT 1 | 数量,默认一件 |
| unit_price | DECIMAL(7, 2) NOT NULL | 单价 |
| discount_rate | FLOAT DEFAULT 1.0 | 折扣比例,默认无折扣即全价销售 |
详细列出了每一笔额外支出的情况,便于核对发票和成本核算。
---
阅读全文