仓库管理数据库
某连锁超市需要设计实现一个仓库管理系统,要求每个仓库可以有多名仓库管理员,每个仓库管理员只负责管理一个仓库,同时每个仓库都配备了一名仓库主管;不同的仓库存放的是不同类型的货品,每种货品只存放在固定的仓库中;定期采购的货品会由当天值班的仓库管理员进行登记入库,若超市中某种货品短缺,去仓库提取货品时,也需由当天值班的仓库管理员进行登记出库。
通过需求分析,设计该系统所需的仓库管理数据库共有5个基本表:管理员信息表(ManagerInfo)、仓库信息表(WarehouseInfo)、货品信息表(ProductInfo)、入库清单表(InList)和出库清单表(OutList),各基本表的表结构如下所示。
(1)管理员信息表(ManagerInfo),用来保存仓库管理员的相关信息
序号 | 字段名 | 字段类型 | 字段长度 | 字段中文名 | 备注 |
1 | Mno | CHAR | 3 | 管理员编号 | 主键 |
2 | Mname | VARCHAR | 10 | 管理员姓名 | 非空 |
3 | Mgender | CHAR | 1 | 管理员性别 | 默认’男’ |
4 | Mbirhdate | DATE | 管理员出生日期 | ||
5 | Mtelephone | CHAR | 11 | 管理员电话 | 非空 |
6 | Mhiredate | DATE | 入职日期 | ||
7 | Wno | CHAR | 3 | 管理仓库编号 | 外键 |
示例数据如下图所示
(2)仓库信息表(WarehouseInfo),用来保存仓库的相关信息
序号 | 字段名 | 字段类型 | 字段长度 | 字段中文名 | 备注 |
1 | Wno | CHAR | 3 | 仓库编号 | 主键 |
2 | Wname | VARCHAR | 10 | 仓库名称 | 非空 |
3 | Wtype | VARCHAR | 7 | 仓库类别 | |
4 | Waddress | VARCHAR | 30 | 仓库地址 | |
5 | Wcharge | CHAR | 3 | 仓库主管 | 外键 |
示例数据如下图所示
(3)货品信息表(ProductInfo),用来保存货品的相关信息
序号 | 字段名 | 字段类型 | 字段长度 | 字段中文名 | 备注 |
1 | Pno | CHAR | 8 | 货品编号 | 主键 |
2 | Pname | VARCHAR | 30 | 货品名称 | 非空 |
3 | Ptype | VARCHAR | 8 | 货品类别 | |
4 | Pprice | FLOAT | 货品售价 | ||
5 | Punit | VARCHAR | 10 | 货品单位 | |
6 | Pweight | VARCHAR | 10 | 货品重量 | |
7 | Pmanufacture | VARCHAR | 30 | 货品生产厂商 | |
8 | Pguaranteedate | VARCHAR | 8 | 货品保质期 | |
9 | Wno | CHAR | 3 | 存放仓库编号 | 外键 |
10 | Pstock | INT | 货品库存量 |
示例数据如下图所示
(4)入库清单表(InList),用来保存各个仓库货品入库的相关信息
序号 | 字段名 | 字段类型 | 字段长度 | 字段中文名 | 备注 |
1 | Iid | 自动编号 | 入库序号 | 主键 | |
2 | Pno | CHAR | 8 | 货品编号 | 外键 |
3 | Wno | CHAR | 3 | 仓库编号 | 外键 |
4 | Mno | CHAR | 3 | 管理员编号 | 外键 |
5 | Idate | DATE | 入库日期 | ||
6 | Isupplier | VARCHAR | 30 | 供应商名称 | |
7 | Iprice | FLOAT | 入库单价 | ||
8 | Inum | INT | 入库数量 |
示例数据如下图所示
(5)出库清单表(OutList),用来保存货品出库的相关信息
序号 | 字段名 | 字段类型 | 字段长度 | 字段中文名 | 备注 |
1 | Oid | 自动编号 | 出库序号 | 主键 | |
2 | Pno | CHAR | 8 | 货品编号 | 外键 |
3 | Wno | CHAR | 3 | 仓库编号 | 外键 |
4 | Mno | CHAR | 3 | 管理员编号 | 外键 |
5 | Odate | DATE | 出库日期 | ||
6 | Onum | INT | 出库数量 | ||
7 | Odest | VARCHAR | 30 | 出库去向 |
示例数据如下图所示
代创建码:
创建数据库的语句
CREATE DATABASE IF NOT EXISTS jxdb
CHARACTER SET UTF8MB4;
USE jxdb;
-- 创建管理员信息表
CREATE TABLE IF NOT EXISTS ManagerInfo (
Mno CHAR(3) PRIMARY KEY COMMENT '管理员编号',
Mname VARCHAR(10) NOT NULL COMMENT '管理员姓名',
Mgender CHAR(1) DEFAULT '男' COMMENT '管理员性别',
Mbirhdate DATE COMMENT '管理员出生日期',
Mtelephone CHAR(11) NOT NULL COMMENT '管理员电话',
Mhiredate DATE COMMENT '入职日期',
Wno CHAR(3) COMMENT '管理仓库编号',
FOREIGN KEY (Wno) REFERENCES WarehouseInfo(Wno)
) COMMENT='管理员信息表';
-- 创建仓库信息表
CREATE TABLE IF NOT EXISTS WarehouseInfo (
Wno CHAR(3) PRIMARY KEY COMMENT '仓库编号',
Wname VARCHAR(10) NOT NULL COMMENT '仓库名称',
Wtype VARCHAR(7) COMMENT '仓库类别',
Waddress VARCHAR(30) COMMENT '仓库地址',
Wcharge CHAR(3) COMMENT '仓库主管',
FOREIGN KEY (Wcharge) REFERENCES ManagerInfo(Mno)
-- 假设仓库主管是管理员表中的管理员
);
-- 创建货品信息表
CREATE TABLE IF NOT EXISTS ProductInfo (
Pno CHAR(8) PRIMARY KEY COMMENT '货品编号',
Pname VARCHAR(30) NOT NULL COMMENT '货品名称',
Ptype VARCHAR(8) COMMENT '货品类别',
Pprice FLOAT COMMENT '货品售价',
Punit VARCHAR(10) COMMENT '货品单位',
Pweight VARCHAR(10) COMMENT '货品重量',
Pmanufacture VARCHAR(30) COMMENT '货品生产厂商',
Pguaranteedate VARCHAR(8) COMMENT '货品保质期',
Wno CHAR(3) COMMENT '存放仓库编号',
Pstock INT COMMENT '货品库存量',
FOREIGN KEY (Wno) REFERENCES WarehouseInfo(Wno)
) COMMENT='货品信息表';
-- 创建入库清单表
CREATE TABLE IF NOT EXISTS InList (
Iid INT AUTO_INCREMENT PRIMARY KEY COMMENT '入库序号',
Pno CHAR(8) COMMENT '货品编号',
Wno CHAR(3) COMMENT '仓库编号',
Mno CHAR(3) COMMENT '管理员编号',
Idate DATE COMMENT '入库日期',
Isupplier VARCHAR(30) COMMENT '供应商名称',
Iprice FLOAT COMMENT '入库单价',
Inum INT COMMENT '入库数量',
FOREIGN KEY (Pno) REFERENCES ProductInfo(Pno),
FOREIGN KEY (Wno) REFERENCES WarehouseInfo(Wno),
FOREIGN KEY (Mno) REFERENCES ManagerInfo(Mno)
);
-- 创建出库清单表
CREATE TABLE IF COMMENT ''NOT EXISTS OutList (
Oid INT AUTO_INCREMENT PRIMARY KEY COMMENT '出库序号',
Pno CHAR(8) COMMENT '货品编号',
Wno CHAR(3) COMMENT '仓库编号',
Mno CHAR(3) COMMENT '管理员编号',
Odate DATE COMMENT '出库日期',
Onum INT COMMENT '出库数量',
Odest VARCHAR(30) COMMENT '出库去向',
FOREIGN KEY (Pno) REFERENCES ProductInfo(Pno),
FOREIGN KEY (Wno) REFERENCES WarehouseInfo(Wno),
FOREIGN KEY (Mno) REFERENCES ManagerInfo(Mno)
);
更改,增加(学生表的例子):
(1)将“年龄”字段Sage改为“出生日期”,同时字段名改为Sbirth,数据类型为DATE;
(2)增加一个“生源地”字段,字段名为Snative,数据类型为VARCHAR(20),将该字段放在出生日期Sbirth的后面
ALTER TABLE Students
CHANGE Sage Sbirth DATE COMMENT '出生日期';
ALTER TABLE Students
ADD Snative VARCHAR(20) COMMENT '生源地' AFTER Sbirth;
(2)显示表的索引信息
SHOW INDEX FROM teachers;
(1)使用CREATE INDEX语句,在课程表的Cname列上按升序创建唯一索引,索引名为IDX_Cou_Cname
CREATE UNIQUE INDEX IDX_Cou_Cname ON Courses (Cname ASC);
(1)使用ALTER TABLE语句,在授课表的Tno列上按升序创建普通索引;
(2)使用ALTER TABLE语句,在授课表的Sclass列上按降序创建普通索引
1)创建索引的语句
ALTER TABLE Tutors
ADD INDEX IDX_Tut_Tno(Tno ASC); ASC可不写,在正常情况下,默认是升序
ALTER TABLE Tutors
ADD INDEX IDX_Tut_Sclass(Sclass DESC);
(1)删除索引的语句
DROP INDEX IDX_Tea_Tprof ON Teachers;
使用SQL语句,用ALTER TABLE语句对各基本表的外键进行声明。
要求:(1)学院表Department,外键Dheader,参照Teachers表的Tno;
(2)专业表Major,外键Dno,参照Department表的Dno;
(3)学生表Students,外键Mno,参照Major表的Mno;
(1)ALTER TABLE Department
ADD CONSTRAINT FK_Dep_Dheader FOREIGN KEY (Dheader) REFERENCES Teachers(Tno);
(2)ALTER TABLE Major
ADD CONSTRAINT FK_Maj_Dno FOREIGN KEY (Dno) REFERENCES Department(Dno);
(3)ALTER TABLE Students
ADD CONSTRAINT FK_Stu_Mno FOREIGN KEY (Mno) REFERENCES Major(Mno);