本项目旨在通过数据库设计方法,构建一个高效、实用的超市管理系统。该系统将涵盖商品管理、库存控制和销售记录等多个方面,以提升超市运营效率与顾客满意度。
### 数据库设计与管理
#### 1. 系统概述及需求分析
数据库用于存储超市的业务数据,包括企业基本信息、收银员信息、商品销售记录以及库存情况等。
- **用户数量**:最多支持5个并发访问。
- **最大连接数限制**:无具体规定,默认使用系统配置的最大值。
- **备份策略与恢复机制**:采用转储和日志文件的组合方式,以确保数据安全性和完整性。针对不同类型的故障制定了相应的恢复方案。
#### 2. 数据库结构设计
##### 表定义
| 序号 | 表名 | 列名 | 含义 | 长度 | 类型 |
|------|------------|--------------|--------------------|--------|-----------|
| 1 | SHOP | ENO | 企业编号 | 10 | Char() |
|| SNAME | 店名 | | 30 | Char() |
|| ADDRESS | 地址 | | 30 | Char() |
| 序号2| ASSISTANT (收银员表) |
|------|--------------|
| ANO 收银员编号 | 10 | Char() |
| ANAME 姓名 | 6 | Char() |
| SEX 性别 | 2 | Char() |
| SALARY 工资 | 8 Int |
| 序号3| BILL (收银小票表) |
|| BNO 小票编号 | 20 | Char() |
|| CNO 商品编号 | 8 | Char() |
|| ANO 收银员编号 | 8 | Char() |
| CNAME 商品名称 | 8 | Char() |
| PRICE 单价 | 8 Float|
| QUANTITY 数量 | 3 Int |
| TOTAL 总价 | 10 Float|
| 序号4| RESERVE (商品库存表) |
|| CNO 商品编号 | 8 | Char() |
|| CNAME 商品名称 | 8 | Char() |
|| PRICE 单价 | 8 float|
| LIST 库存量 | 8 Int |
| PROFESSINAL 供货商名 | 20 |
##### 索引
1. **商品库存表**:创建唯一索引`CRESERVE(CNO)`。
2. **收银小票表**:创建唯一索引`BBILL(BNO)`。
3. **收银员表**:创建唯一索引`AASSISTANT(ANO)`。
##### 视图
定义视图以查看某种商品的销售量和库存情况:
```sql
CREATE VIEW COMMODITY AS SELECT RESERVR.CNO, RESERVR.CNAME, SUM(BILL.QUANTITY) MARKET, RESERVR.LIST FROM RESERVR JOIN BILL ON (RESERVR.CNO = BILL.CNO) GROUP BY BILL.CNO;
```
##### 触发器
创建触发器,当商品库存表中的供货商为空时自动将其改为“本店制作”:
```sql
CREATE TRIGGER UDLIST BEFORE UPDATE OR INSERT ON RESERVE FOR EACH ROW AS BEGIN IF NEW.PROFESSINAL IS NULL THEN SET NEW.PROFESSINAL = 本店制作; END IF; END;
```
##### 存储过程
实现商品卖出时库存量减少的逻辑:
```sql
CREATE PROCEDURE SELL (IN BCNO CHAR, IN QLIST INT) AS BEGIN DECLARE LIST INT DEFAULT 0; SELECT TIST FROM RESERVE WHERE CNO = BCNO INTO LIST; IF LIST IS NULL THEN ROLLBACK; RETURN; END IF; IF LIST < QLIST THEN ROLLBACK; RETURN; END IF; UPDATE RESERVE SET LIST = LIST - QLIST WHERE CNO = BCNO ; COMMIT ; END ;
```
#### 1. 数据库备份与恢复策略
- **转储和日志文件结合**:通过定期数据转储以及记录所有事务操作的日志,确保数据库在故障发生时能够快速准确地进行恢复。
- **具体方案**
- 对于事务故障,反向扫描日志并执行逆向更新。
- 系统故障情况下,则按照正向顺序重做已完成的事务,并撤销未完成的操作。
- 针对介质损坏的情况,在加载最新转储副本后使用相应日志文件中的信息进行恢复操作。