MySQL数据库实训设计——超市管理系统

1 项目需求分析

1.1 项目名称

超市管理系统

1.2 项目功能

商品管理

商品的添加删除查看

删除不在销售的商品

库存管理

设置库存警报

自动更新库存信息

查看全部商品的信息

进货管理

采购订单的增删改查

生成采购历史信息

供货商管理

供货商信息的增删改查

生成供货商报告

销售管理

销售记录的增删改查

生成销售报告

退货管理

退货记录的增改查

生成退货报告

会员管理

会员的增改查

删除已注销的会员

员工管理

员工的增改查

删除离职员工

1.3 项目系统结构图

2 数据库的设计

2.1 概念结构设计

1、局部E-R图

图1-1 员工实体E-R图

图1-2 商品实体E-R图

图1-3 会员实体E-R图

图1-4 仓库实体E-R图

图1-5 退货实体E-R图

图1-6 供货商实体E-R图

2、简化全局E-R图

图2-1 简化全局E-R图

2.2 逻辑结构设计

1、将E-R模型转换为关系模型

员工表(员工编号,员工姓名,身份证号,员工性别,员工年龄,电话,所属部门,职位,工资,员工工龄,入职时间,状态)

商品表(商品编号,商品名称,商品类别,销售单价,采购单价,供货商,状态,仓库编号)

会员表(会员卡卡号,会员姓名,注册日期,电话,余额,累计金额,状态)

仓库表(仓库编号,仓库名称,仓库地址)

供货商表(供货商编号,供货商名称,地址,电话)

退货表(退货记录,交易流水号,商品编号,退货数量,退货金额,退货日期,退货原因,状态)

2对转化后的关系模型进行规范化处理

员工表(员工编号,员工姓名,身份证号,员工性别,员工年龄,电话,部门编号,职位,工资,员工工龄,入职时间,状态)

部门表(部门编号,部门名称)

商品表(商品编号,商品名称,商品类别,销售单价,采购单价,供货商,状态,仓库编号)

会员表(会员卡卡号,会员姓名,注册日期,电话,余额,累计金额,会员等级,状态)

仓库表(仓库编号,仓库名称,仓库地址)

供货商表(供货商编号,供货商名称,地址,电话)

退货表(退货记录,交易流水号,商品编号,退货数量,退货金额,退货日期,退货原因,状态)

进货表(采购订单号,商品编号,采购数量,总金额,供货商编号,采购日期,员工编号,仓库编号)

商品交易表(交易流水号,员工编号,商品编号,交易日期,交易数量,交易金额,会员卡卡号)

仓库存货表(仓库编号商品编号,存货量)

2.3 物理结构设计

(1)员工表staff

列名

数据类型

长度

约束

说明

staffid

varchar

10

主键

员工编号

staffname

varchar

5

员工姓名

idnumber

varchar

18

身份证号

gender

varchar

1

员工性别

age

int

员工年龄

phonenumber

varchar

11

电话

departmentid

varchar

5

外键

部门编号

position

varchar

10

职位

salary

decimal

(10,2)

工资

workexperience

int

员工工龄

hiredate

datetime

入职日期

status

varchar

5

状态

(2)部门表department

列名

数据类型

长度

约束

说明

departmentid

varchar

5

主键

部门编号

departmentname

varchar

50

部门名称

(3)商品表product

列名

数据类型

长度

约束

说明

productid

varchar

10

主键

商品编号

productname

varchar

50

商品名称

category

varchar

10

商品类别

sellingprice

decimal

(10,2)

销售单价

purchaseprice

decimal

(10,2)

采购单价

supplierid

varchar

10

外键

供货商编号

status

varchar

5

状态

warehouseid

varchar

10

外键

仓库编号

(4)会员表member

列名

数据类型

长度

约束

说明

cardnumber

varchar

10

主键

会员卡卡号

membername

varchar

5

会员姓名

registrationdate

datetime

注册日期

phonenumber

varchar

11

电话

balance

decimal

(10,2)

余额

totalamount

decimal

(10,2)

累计金额

level

varchar

10

会员等级

status

varchar

5

状态

(5)仓库表warehouse

列名

数据类型

长度

约束

说明

warehouseid

varchar

10

主键

仓库编号

warehousename

varchar

50

仓库名称

address

varchar

50

地址

(6)供货商表supplier

列名

数据类型

长度

约束

说明

supplierid

varchar

10

主键

供货商编号

suppliername

varchar

50

供货商名称

address

varchar

50

地址

phonenumber

varchar

11

电话

(7)退货表returninfo

列名

数据类型

长度

约束

说明

returnid

varchar

10

主键

退货记录

transactionid

varchar

10

外键

交易流水号

productid

varchar

10

外键

商品编号

returnquantity

int

退货数量

returnamount

decimal

(10,2)

退货金额

returndate

datetime

退货日期

reason

varchar

255

退货原因

status

varchar

5

状态

(8)进货表purchase

列名

数据类型

长度

约束

说明

purchaseorderid

varchar

10

主键

采购订单号

productid

varchar

10

外键

商品编号

purchasequantity

int

采购数量

totalamount

decimal

(10,2)

总金额

supplierid

varchar

10

外键

供货商编号

purchasedate

datetime

采购日期

staffid

varchar

10

外键

员工编号

warehouseid

varchar

10

外键

仓库编号

(9)商品交易表transaction

列名

数据类型

长度

约束

说明

transactionid

varchar

10

主键

交易流水号

staffid

varchar

10

外键

员工编号

productid

varchar

10

外键

商品编号

transactiondate

datetime

交易日期

transactionquantity

int

交易数量

transactionamount

decimal

(10,2)

交易金额

cardnumber

varchar

10

外键

会员卡卡号

(9)仓库存货表warestock

列名

数据类型

长度

约束

说明

warehouseid

varchar

10

主键、外键

仓库编号

productid

varchar

10

主键、外键

商品编号

stock

int

库存量

3 数据库的实现

3.1 数据库

数据库名

定义数据库语句

说明

supermarket

create database supermarket;

创建数据库

3.2 表

表名

定义表语句

说明

department

create table department (

  departmentid varchar(5) primary key,

  departmentname varchar(50)

);

部门表

departmentid为主键

member

create table member (

  cardnumber varchar(10) primary key,

  membername varchar(5),

  registrationdate date,

  phonenumber varchar(11),

  balance decimal(10,2),

  totalamount decimal(10,2),

level varchar(10),

  status varchar(5)

);

会员表

cardnumber为主键

warehouse

create table warehouse (

  warehouseid varchar(10) primary key,

  warehousename varchar(50),

  address varchar(50)

);

仓库表

warehouseid为主键

supplier

create table supplier (

  supplierid varchar(10) primary key,

  suppliername varchar(50),

  address varchar(50),

  phonenumber varchar(11)

);

供货商表

supplierid为主键

staff

create table staff(

  staffid varchar(10) primary key,

  staffname varchar(5),

  idnumber varchar(18),

  gender varchar(1),

  age int,

  phonenumber varchar(11),

  departmentid varchar(5),

  position varchar(50),

  salary decimal(10,2),

  workexperience int,

  hiredate datetime,

  status varchar(20),

foreign key (departmentid) references department(departmentid)

);

员工表

staffid为主键

departmentid为外键

product

create table product (

  productid varchar(10) primary key,

  productname varchar(50),

  category varchar(10),

  sellingprice decimal(10,2),

  purchaseprice decimal(10,2),

  supplierid varchar(10),

  status varchar(5),

warehouseid varchar(10),

foreign key (supplierid) references supplier(supplierid),

foreign key (warehouseid)references warehouse(warehouseid)

);

商品表

productid为主键

supplierid,warehouse为外键

purchase

create table purchase (

  purchaseorderid varchar(10) primary key,

  productid varchar(10),

  purchasequantity int,

  totalamount decimal(10,2),

  supplierid varchar(10),

  purchasedate datetime,

  staffid varchar(10),

warehouseid varchar(10),

  foreign key (productid) references product(productid),

  foreign key (supplierid) references supplier(supplierid),

  foreign key (staffid) references staff(staffid),

foreign key (warehouseid)references warehouse(warehouseid)

);

进货表

purchaseorderid为主键

productid,supplierid,staffid,warehouseid为外键

transaction

create table transaction (

  transactionid varchar(10) primary key,

  staffid varchar(10),

  productid varchar(10),

  transactiondate datetime,

  transactionquantity int,

  transactionamount decimal(10,2),

  cardnumber varchar(10),

  foreign key (staffid) references staff(staffid),

  foreign key (productid) references product(productid),

  foreign key (cardnumber) references member(cardnumber)

);

商品交易表

transactionid为主键

staffid,productid,cardnumber为外键

returninfo

create table returninfo (

  returnid varchar(10) primary key,

  transactionid varchar(10),

  productid varchar(10),

  returnquantity int,

  returnamount decimal(10,2),

  returndate datetime,

  reason varchar(255),

  status varchar(5),

foreign key (transactionid) references transaction(transactionid),

foreign key (productid) references product(productid)

);

退货表

returnid为主键

transactionid,productid为外键

warestock

create table warestock (

    warehouseid varchar(10),

    productid varchar(10),

    stock int default 0,

    primary key (warehouseid, productid),

    foreign key (warehouseid) references warehouse(warehouseid),

    foreign key (productid) references product(productid)

);

仓库存货表

warehouseid,productid为主外键

3.3 数据操纵

数据操纵类型

数据操纵语句

说明

查询数据

select

  suppliername as '供应商名称',

  coalesce(sum(case when transactionamount > 0 then transactionamount else 0 end), 0) as '销售总额',

  coalesce(sum(case when returnamount > 0 then returnamount else 0 end), 0) as '退货总额'

from

  supplier

left join

  product on supplier.supplierid = product.supplierid

left join

  transaction on product.productid = transaction.productid

left join

  returninfo on transaction.transactionid = returninfo.transactionid

group by

  suppliername;

查询每个供应商的销售总额和退货总额

插入数据

insert into department (departmentid, departmentname)

values ('d001', '人事部'), ('d002', '商品部'), ('d003', '营业部'),('d004', '财务部'), ('d005', '市场部'), ('d006', '技术部');

insert into member (cardnumber, membername, registrationdate, phonenumber, balance, totalamount,level,status)

values

  ('m001', '黄一', '2021-05-01', '77774321856', 2645.00, 15000.00,'普通会员','正常'),

  ('m002', '盛二', '2022-01-15', '77778765234', 3285.00, 26512.00,'普通会员', '正常'),

  ('m003', '王三, '2023-07-23', '77778765562', 5628.00, 96152.00, '普通会员','正常'),

  ('m004', '李四', '2023-08-10', '77778765500', 4263.00, 26541.00, '普通会员','正常'),

  ('m005', '王大明', '2023-09-05', '77778765501', 6253.00, 30085.00, '普通会员','正常');

insert into warehouse (warehouseid, warehousename, address)

values ('w001', '主仓库', '河南省漯河市源汇区'), ('w002', '备用仓库', '上海市浦东新区'),('w003', '备用仓库2', '北京市朝阳区'), ('w004', '临时仓库', '广东省深圳市龙华区');

insert into supplier (supplierid, suppliername, address, phonenumber)

values

('s001', 'abc电子', '河南省信阳市平桥区', '55512349864'),

('s002', 'xyz生产厂家', '河南省郑州市金水区', '55556786853'),

('s003', 'nbr厂家', '浙江省杭州市西湖区', '66666786895'),

('s004', 'EFG科技', '北京市海淀区', '55588993456'),

('s005', 'LMN制造厂', '上海市黄浦区', '55512348765'),

('s006', 'OPQ公司', '广东省广州市天河区', '66666987654');

insert into staff (staffid, staffname, idnumber, gender, age, phonenumber, departmentid, position, salary, workexperience, hiredate, status)

values

  ('u001', '宋一, '1000001', '男', 30, '12345678901', 'd001', '经理', 7000.00, 10, '2013-01-01', '在职'),

  ('u002', '郑二', '1000002', '女', 28, '98765432109', 'd002', '采购员', 4000.00, 8, '2015-02-15', '在职'),

  ('u003', '刘三', '1000003', '男', 35, '45678901234', 'd003', '工程师', 6000.00, 12, '2011-03-10', '休假'),

  ('u004', '张小华', '1000004', '男', 25, '12345678902', 'd002', '销售员', 3500.00, 3, '2020-05-20', '在职'),

  ('u005', '李红', '1000005', '女', 32, '98765432108', 'd003', '客户服务', 4500.00, 6, '2018-07-10', '在职');

insert into product (productid, productname, category, sellingprice, purchaseprice, supplierid, status,warehouseid)

values

  ('p001', '智能手机', '电子产品', 8000.00, 6000.00, 's001', '在售','w001'),

  ('p002', '打印机', '办公用品', 600.00, 450.00, 's002', '在售','w001'),

  ('p003', '笔记本', '书本', 12.00, 10.00,'s003', '在售','w001'),

  ('p004', '平板电脑', '电子产品', 5000.00, 4000.00, 's004', '在售','w001'),

  ('p005', '办公椅', '办公家具', 300.00, 250.00, 's005', '在售','w001'),

  ('p006', '水杯', '日用品', 5.00, 3.00, 's006', '在售','w001'),

  ('p007', '羽绒服', '服装', 300.00, 200.00, 's005', '在售','w001');

insert into transaction (transactionid, staffid, productid, transactiondate, transactionquantity, transactionamount, cardnumber)

values

  ('t1001', 'u001', 'p002', '2023-12-01', 3, 1800.00, 'm002'),

  ('t1002', 'u003', 'p003', '2023-12-02', 2, 24.00, 'm001'),

  ('t1003', 'u004', 'p001', '2023-12-2', 2, 16000.00, 'm004'),

  ('t1004', 'u005', 'p003', '2023-11-20', 1, 12.00, 'm005'),

  ('t1005', 'u002', 'p004', '2023-10-10', 1, 5000.00, 'm003'),

  ('t1006', 'u003', 'p005', '2023-9-20', 4, 1200.00, 'm004');

insert into purchase (purchaseorderid, productid, purchasequantity, totalamount, supplierid, purchasedate, staffid,warehouseid)

VALUES

  ('c1001', 'p001', 5, 30000.00, 's001', '2023-09-01', 'u001','w001'),

  ('c1002', 'p002', 3, 1800.00, 's002', '2023-10-15', 'u003','w001'),

  ('c1003', 'p003', 5, 60.00, 's003', '2023-8-01', 'u002','w001'),

  ('c2001', 'p004', 2, 8000.00, 's004', '2023-11-15', 'u002','w001'),

  ('c2002', 'p005', 2, 500.00, 's005', '2023-05-15', 'u001','w001'),

  ('c2003', 'p006', 100, 300.00, 's006', '2023-09-21', 'u005','w001');

insert into returninfo (returnid, transactionid, productid, returnquantity, returnamount, returndate, reason, status)

values

  ('r001', 't1001', 'p001', 2, 1200.00, '2022-12-05', '七天无理由', '成功'),

  ('r002', 't1003', 'p004', 1, 8000.00, '2023-12-3', '质量问题', '拒绝');

insert into warestock (warehouseid, productid, stock)

values

('w001', 'p001', 50),

('w001', 'p002', 30),

('w001', 'p003', 20),

('w001', 'p004', 10),

('w001', 'p005', 15),

('w001', 'p006', 140);

插入数据

修改数据

select staffname,salary from staff where staffname = '张小华';

update staff set salary = 4000 where staffname = '张小华';

select staffname,salary from staff where staffname = '张小华';

将员工 '张小华' 的工资增加到 4000

删除数据

select * from department;

delete from staff where departmentid = 'd006';

delete from department where departmentid = 'd006';

select * from department;

删除技术部(包含技术部所有员工及其本身)

3.4 视图

视图名

定义视图和查询视图语句

说明

view_selling

create view view_selling as

select

  product.productid as 商品编号,

  product.productname as 商品名称,

  product.sellingprice as 销售单价,

  supplier.suppliername as 供货商名称,

  max(transaction.transactionamount) as 最高销售额

from

  product

join

  supplier on product.supplierid = supplier.supplierid

join

  transaction on product.productid = transaction.productid

group by

  product.productid, product.productname, product.sellingprice, supplier.suppliername;

select * from view_selling;

显示销售额最高的商品和供应商

view_return

create view view_return as

select

  product.productid as 商品编号,

  product.productname as 商品名称,

  coalesce(sum(transaction.transactionquantity), 0) as 销售数量,

  coalesce(sum(returninfo.returnquantity), 0) as 退货数量

from

  product

left join

  transaction on product.productid = transaction.productid

left join

  returninfo on transaction.transactionid = returninfo.transactionid

group by

  product.productid, product.productname;

select * from view_return;

显示每个商品的销售数量和退货数量

view_staff

create view view_staff as

select

  staff.staffid as 员工编号,

  staff.staffname as 员工姓名,

  staff.position as 职位,

  department.departmentname as 部门名称

from

  staff

join

  department on staff.departmentid = department.departmentid;

select * from view_staff;

显示员工和所在部门

3.5 索引

索引名

定义索引语句

说明

idx_address

create index idx_address on supplier (address);

show index from supplier\G;

为供货商表的地址列创建普通索引

idx_productid

 create unique index idx_productid on product(productid);

show index from product\G;

为商品表的商品编号列上创建唯一索引

idx_name

create fulltext index idx_name on product(productname);

show index from product\G;

为商品表的商品名称列上创建全文索引

3.6 存储过程

存储过程名

定义及调用存储过程语句

说明

pr_staff

delimiter $$

create procedure pr_staff(in sname varchar(255))

begin

  select

    staff.staffid as 员工编号,

    staff.staffname as 员工姓名,

    coalesce(sum(transaction.transactionamount), 0) as 销售总额

  from

    staff

  left join

    transaction on staff.staffid = transaction.staffid

  where

    staff.staffname = sname

  group by

    staff.staffid, staff.staffname;

end $$

delimiter ;

call pr_staff('张小华');

根据员工姓名查询其销售总额

pr_uprice

select productname as 商品名称,sellingprice as 销售单价 from product;

delimiter $$

create procedure pr_uprice(in discount decimal(5, 2))

begin

  update product

  set sellingprice = sellingprice * (1 - discount / 100);

end $$

delimiter ;

call pr_uprice(10);

select productname as 商品名称,sellingprice as 销售单价 from product;

促销打折时候,批量更新商品的销售单价,传入百分比,例如当打一折时,传入10

3.7 存储函数

存储函数名

定义及调用存储函数语句

说明

fu_high

delimiter $$

create function fu_high(pdid varchar(255)) returns boolean

reads sql data

begin

    declare totalsalesamount decimal(10, 2);

    select coalesce(sum(transactionamount), 0)

    into totalsalesamount

    from transaction

    where staffid = pdid;

return totalsalesamount > 50000;

end $$

delimiter ;

select fu_high('u001');

判断某个员工是否为高销售员工,当某员工总销售额大于50000则为高销售员工,返回1,否则返回0

fu_bestselling

delimiter $$

create function fu_bestselling(productid varchar(255)) returns boolean

reads sql data

begin

    declare totalsalesquantity int;

    select coalesce(sum(transactionquantity), 0)

    into totalsalesquantity

    from transaction

    where productid = productid;

return totalsalesquantity > 100;

end $$

delimiter ;

select fu_bestselling('p001');

判断某商品是否畅销商品,当某商品销量大于100则为畅销产品,返回1,否则返回0

3.8 触发器

触发器名

定义及使用触发器语句

说明

tr_move

select productname,status,warehouseid from product where productid='p007';

delimiter $$

create trigger tr_move

before update on product

for each row

begin

    if new.status = '停售' and old.status <> '停售' then

        set new.warehouseid = 'w002';

    end if;

end $$

delimiter ;

update product set status = '停售' where productid = 'p007';

select productname,status,warehouseid from product where productid='p007';

自动将不在销售的商品从主仓库移入备用仓库

tr_mem

delimiter $$

create trigger tr_mem

before insert on transaction

for each row

begin

    declare memberbalance decimal(10, 2);

    select balance into memberbalance

    from member

    where cardnumber = new.cardnumber;

    if memberbalance < new.transactionamount then

        signal sqlstate '45000'

        set message_text = '会员余额不足,无法完成交易';

    end if;

end $$

delimiter ;

insert into transaction values ('t1010', 'u004', 'p004', '2023-12-06', 10, 50000.00, 'm005');

当会员余额不足时,阻止交易记录的插入,会生成一个SQL异常,提示余额不足

3.9 事件

事件名

定义事件语句

说明

ev_level

set @@global.event_scheduler = true;

select membername,totalamount,level from member;

delimiter $$

create event ev_level

on schedule every 1 month starts now()

do

begin

    update member

    set level =

        case

            when totalamount > 50000 then '金卡会员'

            when totalamount > 30000 then '银卡会员'

            else '普通会员'

        end;

end $$

delimiter ;

select membername,totalamount,level from member;

每月检查会员消费金额并更新会员等级

ev_clear

set @@global.event_scheduler = true;

select purchase.purchaseorderid,purchase.productid, product.productname, purchase.purchasedate from product join purchase on product.productid = purchase.productid;

delimiter $$

create event ev_clear

on schedule every 1 week starts now()

do

begin

    delete from purchase

    where purchasedate < now() - interval 3 month;

end $$

delimiter ;

select purchase.purchaseorderid,purchase.productid, product.productname, purchase.purchasedate from product join purchase on product.productid = purchase.productid;

每周清理超过三个月的采购历史记录

3.10 事务(在存储过程中使用事务)

存储过程名

定义及调用存储过程语句

说明

pr_shopping

select member.cardnumber, member.balance as 购买前余额, member.totalamount as 购买前累计金额, warestock.stock as 购买前库存量

from member

join warestock  on member.cardnumber = 'm001'

join product on product.productid = 'p003' and product.productid = warestock.productid

where warestock.warehouseid = 'w001';

delimiter $$

create procedure pr_shopping(

    in p_product_id varchar(10),

    in p_member_card_number varchar(10),

    in p_quantity int,

    in p_staff_id varchar(10)

)

begin

    declare purchase_amount decimal(10, 2);

    set purchase_amount = (select sellingprice * p_quantity from product where productid = p_product_id);

    start transaction;

    update member

    set balance = balance - purchase_amount

    where cardnumber = p_member_card_number;

    update member

    set totalamount = totalamount + purchase_amount

    where cardnumber = p_member_card_number;

    insert into transaction  values (concat('t', LPAD(FLOOR(RAND() * 1000000000), 9, '0')), p_staff_id, p_product_id, current_date, p_quantity, purchase_amount, p_member_card_number);

    update warestock

    set stock = stock - p_quantity

    where productid = p_product_id;

    commit;

end $$

delimiter ;

call pr_shopping('p003', 'm001', 3, 'u001');

select member.cardnumber, member.balance as 购买后余额, member.totalamount as 购买后累计金额, warestock.stock as 购买后库存量

from member

join warestock  on member.cardnumber = 'm001'

join product on product.productid = 'p003' and product.productid = warestock.productid

where warestock.warehouseid = 'w001';

购物事务,

输入商品编号,会员编号,购买数量,员工编号参数,进行扣除余额、更新累计金额、生成交易记录、更新库存,

并在调用前后查看数据

pr_buy

select

    purchase.*,

    warestock.stock

from

    purchase

join

warestock on purchase.productid = warestock.productid;

delimiter $$

create procedure pr_buy(

    in p_productid varchar(10),

in p_quantity int,

in p_supplierid varchar(10),

in p_staff varchar(10),

in p_warehouseid varchar(10)

)

begin

declare purchase_amount decimal(10, 2);

start transaction;

    set purchase_amount = (select purchaseprice * p_quantity from product where productid = p_productid);

    insert into purchase (purchaseorderid, productid, purchasequantity, totalamount, supplierid, purchasedate, staffid,warehouseid)values (concat('c', lpad(floor(rand() * 1000000000), 9, '0')), p_productid, p_quantity,purchase_amount,p_supplierid,now(), p_staff,p_warehouseid);

    update warestock

    set stock = stock + p_quantity

where productid = p_productid;

commit;

end $$

delimiter ;

call pr_buy('p002',3,'s003','u005','w001');

select

    purchase.*,

    warestock.stock

from

    purchase

join

warestock on purchase.productid = warestock.productid;

采购事务,输入商品编号,商品数量,供货商编号,员工编号参数,进行生成采购记录以及更新库存,并在调用前后查看数据

3.11 数据库用户及权限分配

用户名

定义用户语句

权限分配与回收语句

说明

admin

create user 'admin'@'localhost' identified by 'admin_password';

grant all privileges on supermarket to 'admin'@'localhost';

show grants for 'admin'@'localhost';

revoke all privileges on supermarket from 'admin'@'localhost';

show grants for 'admin'@'localhost';

创建admin用户,为其分配并回收对数据库supermarket的所有权限

user

create user 'user'@'localhost' identified by 'user_password';

grant select on supermarket.*

to 'user'@'localhost';

show grants for 'user'@'localhost';

revoke select on supermarket.* from 'user'@'localhost';

show grants for 'user'@'localhost';

创建user用户,为其分配并回收对数据库supermarket的只读权限

3.12 备份与恢复

操作类型

对应操作的SQL语句

说明

备份

mysqldump -u root -p supermarket > d:/supermarket_backup.sql

数据库备份

恢复

mysql -u root -p supermarket < d:/supermarket_backup.sql

数据库恢复

导出

mysqldump -u root -p supermarket  > d:/supermarket_out.sql

数据库导出

导入

mysql -u root -p supermarket < d:/supermarket_out.sql

数据库导入

  • 63
    点赞
  • 281
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
数据库 超市管理系统设计报告 系统叙述 图 代码 心得体会 参考文献等【提供全部完全版】可是直接应用 班级:计HR05-7 姓名:张 冰 学号:0520010726 2007年7月4日 超市管理系统设计 一、需求分析 1 项目背景 1.1 编写目的   本需求的编写目的在于研究超市管理系统软件的开发途径和应用方法。   本需求的预期读者是与超市管理系统软件开发有联系的决策人,开发组成人员,扶助开发者,支持本项目的领导和公司人员,软件验证者。 1.2 背景及范围   本项目的名称:超市管理系统开发软件。   本项目的任务提出者及开发者是超市管理系统软件开发小组,用户是超市。   超市管理系统超市管理系统是帮助管理人员、商品销售和库存的管理软件。 2 项目概述   该超市管理系统软件目前已有比较完善的管理与使用功能,研制超市管理系统软件是为了满足超市对商品销售和库存管理的方便,以现代化的创新思维模式去工作。 2.1 目标 2.1.1 开发意图   a. 为了超市管理系统更完善;   b. 为了超市对商品库存和销售的管理更方便;   c. 为了减轻工作人员的工作负担。 2.1.2 应用目标   通过本系统软件,能帮助工作人员利用计算机,快速方便的对超市进行管理等操作,使散乱的商品销售量和库存量能够具体化、直观化、合理化。 2.1.3 作用及范围 本软件适用于超市,它是比较完善的系统管理软件 2.1.4 背景   现今超市管理的烦琐给具有强烈时间观念的行政人员带来了诸多不便,为了对商品销售和管理商品库存方便,因此开发了本软件。 2.2 一般约束   a. 本项目的开发经费不超过1万元;   b. 辅导老师1人,开发人员1人;   c. 在管理方针、硬件的限制、并行操作安全和保密方面无约束。 2.3 假设和依据   假设开发经费不到位,管理不完善,设计时没能用全得到考虑,本项目的开发都将受到很大的影响。 3 功能需求 3.1 规格说明   查询超市的全部信息。 3.2 引言 为了查询超市的全部信息。 3.2.1 外部功能 内部功能 操作员和系统管理员 通过应用界面,应用程序,查询等。 同过SQL语言,对数据库的查询、插入、修改、删除等操作。 3.3 性能需求 3.3.1静态数值需求   a. 支持的终端数为4台;   b. 处理并发的40个链接; 3.3.2 精度需求   在精度需求上,根据使用需要,在各项数据的输入、输出及传输过程中,由于本系统使用了数摞结构,可以满足各种精度的需求。 3.3.3时间需求   在软件方面,响应时间、更新处理时间都比较快且迅速,完全满足用户要求。 3.3.4 灵活性   当用户需求,如操作方式,运行环境,结果精度,数据结构与其他软件接口等发生变化时,设计的软件要做适当调整,灵活性非常大。 3.3.5 故障处理   a. 内部故障处理   在开发阶段可以随即修改数据库里的相应内容。   b. 外部故障处理   对编辑的程序进行重装载时,第一次装载认为错,修改。第二次运行,在需求调用时出错,有错误提示,重试。 3.4 设计约束条件 3.4.1 技术约束 本项目的设计采用软硬一体化的设计方法。 3.4.2 环境约束   运行该软件所适用的具体设备必须是奔腾2G内存256兆以上的计算机,局域网络环境 3.4.3 标准约束   该软件的开发完全按照企业标准开发,包括硬件、软件和文档规格。 3.4.4 硬件限制   奔腾2G、内存256兆以上的计算机满足输入端条件。 3.5 接口需求 3.5.1 用户接口   本产品的用户一般需要通过终端进行操作,进入主界面后点击相应的窗口,分别进入相对应的界面(如:输入界面、输出界面)。用户对程序的维护,最好要有备份。 3.5.2 软件接口 WIN2000/XP操作系统. 3.6 属性 3.6.1 可使用性   在装载总程序时,正常就运行,异常就停止;汉语编程系统出现错误,将会产生不可遇见的问题,热启,整个终端程序就会再启动;程序出现错误,重新装载,若仍有错,按照提示逐渐装载。 3.6.2 保密性   本软件作为超市管理辅助设备,它的规模比较小,不需要保密技术;限定一个程序中某些区域的规约,给不同的模块分配不同的功能。 3.6.3 可维护性   本软件的组成程序为汉语成语设计语言,组构均较简单,直观意义上的较独立。因此,基于电子化所构成的硬件的简单可维护的特点,决定了该软件的简单可维护性。 3.6.4 可转移、可转换性 可转移的环境是奔腾1G、128兆内存以上;不可修改任何部分; 3.6.5 注释   本产品拥有的属性十分重要,它使得读者用规定的方法去客观的验证软件的各种特性。 3.7 数据库   数据库是实现有组织地,动态地存储大量关联数据,方便多用户访问的计算机软硬件组成的系统;它与文件系统的重要区别是数据的充分共享,交叉访问,与应用程序的高度独立性。   由于本软件的整体结构比较简单,所涉及数据相对来说也较少,组成文件的最小单位是记录。 4 设备   奔腾1g、内存128兆以上的计算机。局域网络环境 5 需求注释 对于本软件,它的功能需求、性能需求、接口需求,从稳定性、可行性上都是可以的。 6 功能树 二、概念设计 1 实体及其属性 (1)超市E-R图: (2)收银员E-R图: (3)收银小票E-R图: (4)商品库存E-R图: 2 综合ER图 图2-1 超市管理ER图 三、逻辑设计 超市表(企业编号,店名,地址),主键为企业编号,符合三范式。 收银员表(收银员编号,姓名,性别,工资),主键为收银员编号号,符合三范式。 收银小票表(小票编号,商品编号,收银员编号,商品名称,单价,个数,总价)主键 为小票编号,符合三范式。 商品库存表(商品编号,商品名称,单价,库存量,供货商名)主键为商品编号号,符 合三范式。 表3-1 超市表SHOP 列名 含义 长度 类型 NULL DEFAULT ENO 企业编号 10 Char() no no SNAME 店名 30 Char() no no ADDRESS 地址 30 Char() no no 表3-2 收银员表ASSISTANT 列名 含义 长度 类型 NULL DEFAULT ANO 收银员编号 10 Char() no no ANAME 姓名 6 Char() no no SEX 性别 2 Char() no no SALARY 工资 8 INT no no 表3-3收银小票 表BILL 列名 含义 长度 类型 NULL DEFAULT BNO 小票编号 20 Char() no no CNO 商品编号 8 Char() no no ANO 收银员编号 8 Char() no no CNAME 商品名称 8 Char() no no PRICE 单价 8 Float() no no QUANTITY 个数 3 Int no no TOTAL 总价 10 Float () no no 表3-4 商品库存表RESERVR 列名 含义 长度 类型 NULL DEFAULT CNO 商品编号 8 Char() no no CNAME 商品名称 8 Char() no no PRICE 单价 8 Float() no no LIST 库存量 8 Int no no PROFESSINAL 供货商名 20 Char() yes no 四、其它数据库对象的设计 1、索引 (1)商品库存表商品编号索引 CREATE UNIQUE INDEX CRESERVE ON RESERVE(CNO ); (2)收银小票表小票编号索引 CREATE UNIQUE INDEX BBILL ON BILL (BNO); (3)收银员表中收银员编号索引 CREATE UNIQUE INDEX AASSISTANT ON ASSISTANT (ANO); 2、视图 某种商品的销售量和库存量的视图 GREATE VIEW COMMODITY (CNO,CNAME,MARKET,LIST) AS SELECT RESERVR .CNO,RESERVR .CNAME,SUM(QUANTITY),LIST FROM RESERVR ,BILL GROUP BY BILL.CNO 3、触发器 定义一个触发器,当商品库存表中,供货商为空时,自动改为”本店制作”。 CREATE TRIGGER UDLIST BEFORE UPDATE OR TNSERT ON RESERVR FOR EACH ROW AS BEGIN IF PROFESSINAL IS NULL THEN PROFESSINAL:=’本店制作’; END IF; END; 4、存储过程 利用存储过程来实现,当某商品卖出时,它的商品库存量相应的减少. CREATE PROCEDURE SELL ( BCNO CHAR, QLIST INT) AS DECLARE BEGIN SELECT TIST FROM RESERVE WHERE BCNO =RESERVE.CNO; IF LIST IS NULL THEN ROLLBACK; RETURN; END IF; IF LIST<QUANTITY THEN ROLLBACK; RETURN; END IF; UPDATE RESERVE SET LIST=LIST-QLIST WHERE BCNO=RESERVE.CNO; COMMIT; END; 五、备份及恢复策略 备分策略 采用数据转储和登录日志文件两种方法结合的方法备分数据库。 针对不同的故障,制定恢复策略 1、事务故障的恢复策略 (1)反向扫描日志文件,查找该事务的更新操作. (2)对事务的更新操作执行逆操作. (3)继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理. (4)如此处理下去,直到读到此事务的开始标记,事务故障恢复就完成了. 2、系统故障的恢复策略 (1)正向扫描日志文件,找出在故障发生前已经提交的事务,将其事务标识记入重做队列.同时找出故障发生时尚未完成的事务,将其事务标识记入撤消队列. (2)对撤消队列中的各个事务进行撤消处理. (3)对重做队列中的各个事务进行重做处理. 3、介质故障恢复策略 (1)装入最新的数据库后备副本,使数据库恢复到最近一次转储时一致性状态. (2)装入相应的日志文件副本,重做已完成的事务.
本系统为中小型超市销售管理系统,因此系统需求分析阶段主要采取实地采访、调查学校周边超市,网上查找相关资料,请教老师等多种方式,尤其是仔细思考、分析超市购物发票。这一阶段大概了解了目前超市销售管理的现状,了解了超市销售方面的业务,同时也发现了其中存在的一些问题。经过近两天时间的实践,了解了很多关于超市的知识,收获挺多的。 需求分析成果如下。 系统要处理的基本对象包括营业员基本信息、会员基本信息、管理员基本信息、商品基本信息、货架基本信息、销售单基本信息、退货单基本信息等多个对象。各个基本对象包含信息如下所示: 营业员(营业员号,姓名,收银台位置,上班时间,下班时间,月薪,联系电话); 会员(会员卡号,会员姓名,卡密码,注册时间,累计消费); 商品(商品编号,货架编号,条形码,商品名称,商品价格,现有存量,存量底线,生产日期,保质期,供货商); 销售单(销售单编号,营业员编号,会员卡号,打印时间,有无折扣); 销售商品(销售单号,商品编号,销售数量); 货架(货架编号,管理员号,货架名称); 管理员(管理员号,姓名,联系电话,上班时间,下班时间,月薪); 退货单(退货单号,商品编号,退货数量); 打印(退货单号,销售单号,营业员号,打印时间)。 本中小型超市销售管理系统大体上包含三个模块,为前台收银业务处理,前台退货业务处理以及后台销售处理功能模块,具体如下所述。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值