产品供应与订购信息数据库设计----数据库设计

文章详细阐述了数据库的设计过程,包括概念设计阶段的实体关系分析和实体关系图绘制,逻辑设计阶段将ER图转化为满足3NF的关系模型,以及数据库的具体实现,如创建MySQL数据表、添加完整性约束和索引。此外,还涉及到了数据库的管理与维护,如用户权限设置和数据备份恢复操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

完成数据库结构设计(包括概念设计和逻辑设计)
(1)根据项目背景分析实体和实体之间的关系,画出实体关系图;
(2)将实体关系转化为实体关系模型并要求满足3NF;
(3)由关系模型确定数据库的表结构,包括必须的完整性约束及其表之间的联系;

实体关系图

在这里插入图片描述

数据库设计的逻辑设计

第一范式(1NF)
要求数据库表的每一列都是不可分割的原子数据项—表中的所有字段值都是不可分解的原子值

第二范式(2NF)
需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关–针对联合主键
在1NF的基础上,非码属性必须完全依赖于候选码–(在1NF基础上消除非主属性对主码的部分函数依赖)

第三范式(3NF)
需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
在2NF基础上,任何非主属性不依赖于其它非主属性–(在2NF基础上消除传递依赖)

关系模式
客户(cno ,cname,trades,caddress,clinkman,ctelephone)
产品(pno ,pname,spec,unit,untiprice)
厂家(fno ,fname,faddress,salemanger,ftelephone)
订购(cnopno ,amount,date)
供应(pnofno ,samount,sdate)

数据库实现

已知产品供应与订购的业务关系如下图:
在这里插入图片描述
其中,客户(client)的属性有:客户编码(cno)、客户名称(cname)、所属行业(trades)、客户地址(caddress)、客户联系人(clinkman)、客户电话(ctelephone);
产品(product)的属性有:产品编号(pno)、产品名称(pname)、规格(spec)、单位(unit)、单价(unitprice);
厂家(factory)的属性有:厂家编码(fno)、厂家名称(fname)、厂家地址(faddress)、销售经理(salesmanager)、厂家电话(ftelephone)。
在客户订购(order)产品中,一个客户可以订购多种产品,一种产品也可以被多个客户订购,客户订购产品时须标明订购的订购数量(amount)和订购日期(date);在厂家供应(supply)产品中,一种产品可以由多个厂家供应,一个厂家也可供应多种产品,厂家供应产品时须标明供应日期(sdate)和供应数量(samount)。
(2)数据库结构设计概念设计:根据项目背景分析实体和实体之间的关系,画出实体关系图。
逻辑设计:
●将实体关系转化为实体关系模型并要求满足3NF。
●由关系模型确定数据库的表结构,包括必须的完整性约束及其表之间的联系。
3.数据库实现与应用
(1)创建名为“TEST_学号”的数据库;

(2)创建数据库的所有数据表;

(3)编辑数据:给每个表输入至少10个记录(均为模拟数据);为调试后续编程,应要求每个客户订购多种产品,每种产品有多个厂家供应。客户、产品有5个记录即可,但订购、供应和厂家要有更多个记录。另外,要求同一种产品不同厂家的单价不相同。

(4)设计并实现如下对象或应用
●创建数据库表之间的关系图

●在客户表上创建关于“所属行业”列的一个索引;

●创建一个包含“所属行业”、“客户名称”、订购的“产品名称”和“订购数量”信息的视图;

●编写SQL语句插入一条客户订购产品记录,内容自定。

●编写SQL语句修改一条厂家供应产品记录,内容自定。

●编写查询程序,并将程序存为脚本文件。

①查询各客户订购的某同一种产品的总数量和平均单价。要求首先按客户分组,然后每一组内再按产品分组。

②查询各种产品的所有厂家的名称和单价,并按单价从低到高的顺序排列。

4.数据库管理与维护
●通过SQL语句添加数据库用户user01,并授予该用户对订购数据表的insert、select、update和delete权限;

●通过SQL语句实现对数据库的完全备份和还原。

MySQL语句

创建数据库

CREATE DATABASE test_0337;

创建客户表(cn)

CREATE TABLE `cn` (
  `cno` int NOT NULL,
  `cname` varchar(255) NOT NULL,
  `trades` varchar(255) NOT NULL,
  `clinkname` varchar(255) NOT NULL,
  `ctelephone` varchar(255) NOT NULL,
  `caddress` varchar(255) NOT NULL,
  PRIMARY KEY (`cno`)
) 

创建厂家表(fn)

CREATE TABLE `fn` (
  `fno` int NOT NULL,
  `fname` varchar(255) NOT NULL,
  `faddress` varchar(255) NOT NULL,
  `salemanager` varchar(255) NOT NULL,
  `ftelephone` varchar(255) NOT NULL,
  PRIMARY KEY (`fno`)
) 

创建产品表(pn)

CREATE TABLE `pn` (
  `pno` int NOT NULL,
  `pname` varchar(255) NOT NULL,
  `spec` varchar(255) NOT NULL,
  `unit` varchar(255) NOT NULL,
  `untiprice` varchar(255) NOT NULL,
  PRIMARY KEY (`pno`)
)

创建订购表(order)

CREATE TABLE `order` (
  `cno` int NOT NULL,
  `pno` int NOT NULL,
  `amount` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `date` datetime NOT NULL,
  PRIMARY KEY (`cno`,`pno`),
  KEY `ofpno` (`pno`),
  CONSTRAINT `ofcno` FOREIGN KEY (`cno`) REFERENCES `cn` (`cno`),
  CONSTRAINT `ofpno` FOREIGN KEY (`pno`) REFERENCES `pn` (`pno`)
) 

创建供应表(supply)

CREATE TABLE `supply` (
  `pno` int NOT NULL,
  `fno` int NOT NULL,
  `samount` varchar(255) NOT NULL,
  `sdate` datetime NOT NULL,
  PRIMARY KEY (`pno`,`fno`),
  KEY `sffno` (`fno`),
  CONSTRAINT `sffno` FOREIGN KEY (`fno`) REFERENCES `fn` (`fno`) ON DELETE RESTRICT,
  CONSTRAINT `sfpno` FOREIGN KEY (`pno`) REFERENCES `pn` (`pno`) ON DELETE RESTRICT
)

创建“所属行业”升序序列

CREATE INDEX ik_trades ON cn(trades ASC);

创建“所属行业”“客户名称”“产品名称”“订购数量”的视图

CREATE VIEW cnv(所属行业,客户名称,产品名称,订购数量)
AS SELECT trades,cname,pname,amount FROM cn,pn,`order`
WHERE cn.cno=`order`.cno AND pn.pno=`order`.pno;

编写SQL语言插入一条客户订购产品记录

INSERT INTO `order` VALUES(5,2,130,'2022-12-04 07:59:13');

编写SQL语言修改一条厂家供应记录

UPDATE supply SET samount='123' WHERE pno=1 AND fno=7;

编写查询程序(客户分组、产品分组)

SELECT cname AS 客户名称,pname AS 产品名称,SUM(amount) AS 总数量,AVG(untiprice) AS 平均单价
FROM cn,pn,`order` WHERE cn.cno=`order`.cno AND pn.pno=`order`.pno
GROUP BY cn.cno,pname;

编写查询程序(厂家名称和单价从低到高)

SELECT pname AS 产品名称,fname AS 厂家名称, untiprice AS 单价 FROM pn,fn,supply
WHERE fn.fno=supply.fno AND pn.pno=supply.pno
ORDER BY untiprice ASC;

数据库管理和维护

添加数据库用户user01

CREATE USER user01@localhost IDENTIFIED by'123456';

给order表授予权限

GRANT SELECT,INSERT,UPDATE,DELETE ON `order` to user01@localhost;

数据备份

mysqldump -u root -p  test_0337 >F:\test.sql

数据恢复

mysql -u root -p test_0337 <F:\test.sql
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值