数据库实验5 数据库设计实验

news2025/7/16 12:52:56

前言:不知道啥原因,最后设计出来少了一个表,无语

实验5 数据库设计实验

1.实验目的

掌握数据库设计基本方法及数据库设计工具。

2.实验内容和要求

掌握数据库设计基本步骤,包括数据库概念结构设计、逻辑结构设计,物理结构设计,数据库模式SQL语句生成。能够使用数据库设计工具进行数据库设计。

3.实验过程

设计一个采购、销售和客户管理应用数据库。其中,一个供应商可以供应多种零件,一种零件也可以有多个供应商。一个客户订单可以订购多种供应商供应的零件。客户和供应商都分属不同的国家,而国家按世界五大洲八大洋划分地区。请利用PowerDesigner或者ERwin 等数据库设计工具设计该数据库。

1.概念结构设计

识别出零件Part 、供应商Supplier,客户Customer,订单Order ,订单项Lineitem,国家Nation,地区Region等7个实体。每个实体的属性、码如下。

  • 零件Part:零件编号partkey,零件名称name,零件制造商mfgr,品牌 brand,类型type,大小Size,零售价格retailprice,包装container,备注comment。主码:零件编号partkey
  • 供应商Supplier:供应商编号suppkey,供应商名称name,地址address,国籍nation,电话 phone,备注comment等。主码:供应商编号suppkey
  • 客户Customer:客户编号custkey,客户名称name,地址address,电话phone,国籍nation,备注comment。主码:客户编号custkey
  • 订单Order:订单编号orderkey,订单状态status,订单总价totalprice,订单日期orderdate,订单优先级orderpriority,记账员clerk,运送优先级shippriority,备注comment。主码:订单编号orderkey
  • 订单项Lineitem:订单项编号linenumber,所订零件号partkey,所订零件供应商号suppkey,零件数量quantity,零件总价extendedprice,折扣 discount,税率tax ,退货标记returnflag等。主码:订单项编号 linenumber
  • 国家Nation:国家编号nationkey,国家名称name,所属地区region,备注comment主码:国家编号nationkey
  • 地区Region:地区编号regionkey,地区名称name,备注comment。主码:地区编号regionkey 。

根据实际语义,分析实体之间的联系,确定实体之间一对一,一对多和多对多联系。 画出实体-联系图(E-R图)。

在这里插入图片描述

2.逻辑结构设计

按照数据库设计原理中概念结构转化成逻辑结构的规则,每个实体转换成一个关系,多对多的联系也转换成一个关系。因此,根据上述画出的E-R图设计数据库逻辑结构。

1) 使用Power Designer数据库设计工具设计数据库逻辑结构,打开,并创建一个概念模型

在这里插入图片描述

2)根据E-R图,新建一个供应商的Entity(实体),这里需要注意,书写name的时候,code自行补全,name可以是英文的也可以是中文的,但是code必须是英文的。

在这里插入图片描述

然后选择Attributes框,将供应商表的每一列设计好

在这里插入图片描述

每列的含义如下:

  • Name: 实体名字一般为中文
  • Code: 实体代号,一般用英文
  • Data Type:实体的数据类型
  • Length:实体的数据长度
  • Domain域表示属性取值范围如可以创建10个字符的地址域
  • M:Mandatory强制属性,表示该属性必填。不能为空
  • P:Primary Identifer是否是主标识符,表示实体唯一标识符
  • D:Displayed显示出来,默认全部勾选

设置的主标识符可以在Identifiers(标识符)这个模块删除或添加主标识符。

创建完的实体如下:

在这里插入图片描述

根据上述步骤,完成其他六个实体的的逻辑结构设计

在这里插入图片描述

使用Relationship(关系)这个按钮可以连接七个表之间的关系,发生一对多或者多对一的关系。

在这里插入图片描述

修改好对应关系(1对多或多对多)点击确认后

在这里插入图片描述

根据E-R图完成数据库逻辑结构

在这里插入图片描述

3.物理结构设计

数据库物理结构首先根据逻辑结构自动转换生成,然后根据应用需求设计数据库的索引结构、存储结构。

1)检查CDM正确性

在CDM设计界面上选择Tools->Check Model命令,检查CDM正确性,如果存在错误,检查并更正。

在这里插入图片描述

2)将CDM转换成PDM(物理模型)

工具栏上选择Tools-Generate Physical Data Model命合,出现PDM Generation Options对话框,在General选项卡中,设置转换生成的PDM基本属性,包括使用哪种DBMS。
在这里插入图片描述

3)保存PDM

选择File->Save,保存该PDM。

在这里插入图片描述

4.数据库模式SQL语句生成

生成MySQL数据库管理系统的SQL语句。

选择刚才生成的物理概念模型,在对象浏览区展开Tables,点击各个表格,可以在表格中看到对应DBMS的SQL语句。

在这里插入图片描述

至此,一个采购、销售和客户管理应用数据库就设计完毕。

此外还可以使用此生成的数据库生成sql源文件,使用mysql打开此源文件并编译便可创建一个数据库,最终生成的数据库mysql如下:

/*==============================================================*/
/* DBMS name:      MySQL 5.0                                    */
/* Created on:     2022/11/30 11:27:43                          */
/*==============================================================*/


drop table if exists Customer;

drop table if exists Lineitem;

drop table if exists Nation;

drop table if exists "Order";

drop table if exists Part;

drop table if exists Region;

drop table if exists partsupp;

/*==============================================================*/
/* Table: Customer                                              */
/*==============================================================*/
create table Customer
(
   custkey              int not null,
   nationkey            int,
   name                 varchar(25) not null,
   address              varchar(40) not null,
   phone                char(30) not null,
   nation               char(20) not null,
   comment              varchar(100),
   primary key (custkey)
);

/*==============================================================*/
/* Table: Lineitem                                              */
/*==============================================================*/
create table Lineitem
(
   linenumber           int not null,
   Sup_suppkey          int,
   orderkey             int,
   Par_partkey          int,
   partkey              int not null,
   suppkey              int not null,
   quantity             int not null,
   tax                  bigint not null,
   discount             bigint not null,
   extendedprice        int not null,
   returnflag           char(1) not null,
   primary key (linenumber)
);

/*==============================================================*/
/* Table: Nation                                                */
/*==============================================================*/
create table Nation
(
   nationkey            int not null,
   regionkey            int,
   name                 char(25) not null,
   region               char(25) not null,
   comment              varchar(100),
   primary key (nationkey)
);

/*==============================================================*/
/* Table: "Order"                                               */
/*==============================================================*/
create table "Order"
(
   orderkey             int not null,
   custkey              int,
   status               char(1) not null,
   totalprice           int not null,
   orderdate            date not null,
   orderpriority        char(15) not null,
   clerk                char(16) not null,
   shippriority         char(1) not null,
   comment              varchar(100),
   primary key (orderkey)
);

/*==============================================================*/
/* Table: Part                                                  */
/*==============================================================*/
create table Part
(
   partkey              int not null,
   name                 varchar(25) not null,
   mfgr                 char(50) not null,
   brand                char(50) not null,
   type                 varchar(50) not null,
   Size                 int not null,
   retailprice          int not null,
   container            char(10) not null,
   comment              varchar(100),
   primary key (partkey)
);

/*==============================================================*/
/* Table: Region                                                */
/*==============================================================*/
create table Region
(
   regionkey            int not null,
   name                 char(25) not null,
   comment              varchar(100),
   primary key (regionkey)
);

/*==============================================================*/
/* Table: partsupp                                              */
/*==============================================================*/
create table partsupp
(
   suppkey              int not null,
   partkey              int not null,
   primary key (suppkey, partkey)
);

alter table Customer add constraint "FK_Belong.to" foreign key (nationkey)
      references Nation (nationkey) on delete restrict on update restrict;

alter table Lineitem add constraint "FK_Belong-to" foreign key (orderkey)
      references "Order" (orderkey) on delete restrict on update restrict;

alter table Lineitem add constraint "FK_Include." foreign key (Par_partkey)
      references Part (partkey) on delete restrict on update restrict;

alter table Nation add constraint FK_Belong_to foreign key (regionkey)
      references Region (regionkey) on delete restrict on update restrict;

alter table "Order" add constraint FK_Purchase foreign key (custkey)
      references Customer (custkey) on delete restrict on update restrict;

alter table partsupp add constraint FK_partsupp2 foreign key (partkey)
      references Part (partkey) on delete restrict on update restrict;

4.思考题

试选择一个应用,练习数据库设计。

创建一个TPCH数据库

CREATE TABLE region(
	regionkey INT PRIMARY KEY,
	name CHAR(25),
	comment VARCHAR(150)
);
CREATE TABLE nation(
	nationkey INT PRIMARY KEY,
	name CHAR(25),
	regionkey INT,
	comment VARCHAR(150),
	FOREIGN KEY(regionkey) REFERENCES region(regionkey)
);
CREATE TABLE supplier(
	suppkey INT PRIMARY KEY,
	name CHAR(100),
	address VARCHAR(100),
	nationkey INT,
	phone CHAR(30),
	acctbal NUMERIC(12,2),
	comment VARCHAR(100),
	FOREIGN KEY(nationkey) REFERENCES nation(nationkey)
);
CREATE TABLE part(
	partkey INT PRIMARY KEY,
	name VARCHAR(100),
	mfgr CHAR(50),
	brand CHAR(50),
	type VARCHAR(25),
	size INT,
	container CHAR(10),
	retailprice NUMERIC(8,2),
	comment VARCHAR(20)
);
CREATE TABLE partsupp(
	partkey INT,
	suppkey INT,
	availqty INT,
	supplycost NUMERIC(10,2),
	comment VARCHAR(200),
	PRIMARY KEY(partkey,suppkey),
	FOREIGN KEY(partkey) REFERENCES part(partkey),
	FOREIGN KEY(suppkey) REFERENCES supplier(suppkey)
);
CREATE TABLE customer(
	custkey INT PRIMARY KEY,
	name VARCHAR(25),
	address VARCHAR(40),
	nationkey INT,
	phone CHAR(30),
	acctbal NUMERIC(12,2),
	mktsegment CHAR(10),
	comment VARCHAR(100),
	FOREIGN KEY(nationkey) REFERENCES nation(nationkey)
);
CREATE TABLE orders(
	orderkey INT PRIMARY KEY,
	custkey INT,
	orderstatus CHAR(1),
	totalprice NUMERIC(10,2),
	orderdate DATE,
	orderpriority CHAR(15),
	clerk CHAR(16),
	shippriority CHAR(1),
	comment VARCHAR(60),
	FOREIGN KEY(custkey) REFERENCES customer(custkey)
);
CREATE TABLE lineitem(
	orderkey INT,
	partkey INT,
	suppkey INT,
	linenumber INT,
	quantity INT,
	extendedprice NUMERIC(8,2),
	discount NUMERIC(3,2),
	tax NUMERIC(3,2),
	returnflag CHAR(1),
	linestatus CHAR(1),
	shipdate DATE,
	commitdate DATE,
	receiptdate DATE,
	shipinstruct CHAR(25),
	shipmode CHAR(10),
	comment VARCHAR(40),
	PRIMARY KEY(orderkey,linenumber),
	FOREIGN KEY(partkey,suppkey) REFERENCES partsupp(partkey,suppkey)
);

5.实验总结

本次实验的重点在于概念结构的设计以及逻辑结构的设计;逻辑结构设计虽然可以按照一定的规则从概念结构 转换而来,但是由于概念结构通常比较抽象,较少考虑更多细节较少考虑更多细节,因此转换而成的 逻辑结构还需要进一步调整和优化。
e DATE,
commitdate DATE,
receiptdate DATE,
shipinstruct CHAR(25),
shipmode CHAR(10),
comment VARCHAR(40),
PRIMARY KEY(orderkey,linenumber),
FOREIGN KEY(partkey,suppkey) REFERENCES partsupp(partkey,suppkey)
);




#### 5.实验总结

本次实验的重点在于概念结构的设计以及逻辑结构的设计;逻辑结构设计虽然可以按照一定的规则从概念结构 转换而来,但是由于概念结构通常比较抽象,较少考虑更多细节较少考虑更多细节,因此转换而成的 逻辑结构还需要进一步调整和优化。
这次的概念结构选择了实验指导书中一直使用的采购、销售和客户管理应用数据库,较为复杂,但是比较更能学好概念结构设计和逻辑结构设计。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/109001.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flarum部署:从源码到docker到放弃

警告: 此篇文章前半段记录了我用代码部署flarum遇到的一些问题和解决办法,但是可能是由于我是在不熟悉php的框架结构,最终我还是选择了使用docker进行部署,请斟酌是否继续阅读本文。 Hello,大家好,我是内网…

开源项目-OA自动化管理系统

哈喽,大家好啊,今天给大家带来一个开源系统-办公自动化管理系统 简介: OA( Office Automation System)办公自动化系统是一个企业用来管理日常事务的系统,它一般用来管理各种流程(报销、请假. . .)审批,通讯…

Fabric.js 元素中心缩放

本文简介 点赞 关注 收藏 学会了 使用 fabric.js 创建的图形,默认的缩放原点是元素操作点的对角点。 如下图所示: 如果按住 alt 键 操作会把原点移动到元素中心。 如下图所示: 如果想将默认缩放操作设置为“中心缩放”,只需…

ImportError: DLL load failed while importing etree: 找不到指定的模块。

目录标题前言错误描述报错代码如下:原因:解决办法前言 今天我正在悠闲的逛着网站寻找今天要爬取的目标当我找到目标的时候正要创建我的scrapy爬虫文件的时候竟然报错了我很惊讶😮😮😮!!&#x…

安全分析模型核心服务部署

安全分析模型核心服务部署 ModelOps 对所有的人工智能 模型(图形模型、语言模型、基于规则的模型)以及决策模型的整个生命周期 进行管理,确保对生产中的所有模型进行独立验证和问责,其核心功能涵盖了模型存储、模型测试、模型回滚…

非零基础自学Golang 第15章 Go命令行工具 15.6 性能分析 15.6.1 安装Graphviz

非零基础自学Golang 文章目录非零基础自学Golang第15章 Go命令行工具15.6 性能分析15.6.1 安装Graphviz第15章 Go命令行工具 15.6 性能分析 性能分析和调优是一种强大的技术,用于验证是否满足实际性能要求。 Go语言支持使用go tool pprof工具进行性能查看及调优。…

DNS协议分析

上一篇文章从工作原理角度分析了DNS的作用与意义,这次来看看DNS到底是以什么形式进行通信的。 DNS报文格式如下所示: DNS报文由12字节长的首部和4个长度可变的字段组成。 1.标识,由主机端设置,为的是唯一标识当前DNS报文。 2.1…

关于Docker入门

目录 1.Docker简介 2.Centos7安装Docker 3.Docker HelloWorld运行原理解析 4.阿里云镜像仓库 5.Docker命令 Docker基本命令 Docker镜像常用命令 Docker 容器常用命令 1.Docker简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源 Doc…

Vue3——vuex的使用——axios网络请求的使用

vuex作用:用来集中式管理数据 集中式的应用,当前有四个组件A,B,C,D,假如现在有一个数据x在A里面,现在其他三个组件都要用到x并且好要修改x的时候,有一种方法就要用到全局事件总线,如下图所示 像上面这样不…

用于生成随机曲面的Matlab程序(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 本文在总结、分析现有随机图形生成方法的基础上,结合自由形状的造型技术、自适应神经网络的自适应学习机理&#x…

科研人快速入门LaTex到日常使用,下载安装配置,语法使用说明等

1 前言 Latex是一款开源免费并且应用相当广泛的排版工具,被⼴泛运⽤在各个⾏业,⽐如学术界、出版界。LaTeX 和 Word 相比,LaTeX 入门者更能写出漂亮的文档。它不但能对文字、公式、图片进行精确而复杂的排版,并且还能保证全文各个…

【OpenFeign】【源码+图解】【四】FeignClient实例工具类ReflectiveFeign

【OpenFeign】【源码图解】【三】FeignClient的配置信息 目录5. FeignClient实例工具类ReflectiveFeign5.1 增强Builder属性5.1.1 Capability5.2 创建ReflectiveFeign5. FeignClient实例工具类ReflectiveFeign 上文中调用了targeter.target(this, builder, context, target)&a…

【GO】 K8s 管理系统项目[API部分--Node]

K8s 管理系统项目[API部分–Node] 1. 接口实现 service/dataselector.go type nodeCell corev1.Nodefunc(n nodeCell) GetCreation() time.Time {return n.CreationTimestamp.Time }func(n nodeCell) GetName() string {return n.Name }2. Node功能 service/node.go 2.1 重…

基于Servlet 的Java Web项目的CSRF防御概念

本篇创建一个基本的Jave Web 项目, 使用Servlet提供服务, 使用Filter 处理CSRF防御。 演示环境 Java 1.8.0_211Eclipse 2021-06 (4.20.0)Maven 3.6Servlet 创建与运行 在Eclipse 中创建一个简单的Maven 项目, 项目名为 java-web,如下图: 创建完成的项目目录结构如下: 创…

pre compile header

预编译头文件存在的目的是减少一个项目中不经常改动的文件的编译次数; 打个比方:c标准库,当我们在项目中调用一个c标准库的时候,这个库一般是只读的,所以我们没必要每次编译项目的时候都recompile c标准库&#xff1b…

预约挂号系统技术点详解(二)

一、微服务间服务的调用介绍 1. 需求(医院接口远程调用数据字典) service-hosp服务调用service-cmn服务 2. 实现步骤 ⑴ 搭建service-client父模块 修改pom文件,添加需要使用的model模块和工具模块依赖,并添加openfeign依赖 …

Python学习笔记-PyQt

记述PyQt的相关基本知识。 一、PyQt概述 PyQt是一个创建GUI应用程序的工具包。它是Python编程语言和Qt库的成功融合。Qt库是最强大的库之一。PyQt是由Phil Thompson 开发。 PyQt实现了一个Python模块集。它有超过300类,将近6000个函数和方法。它是一个多平台的工…

使用 kube-prometheus(release-0.6) 监控 Kubernetes v1.18.20

本文档是使用 kube-prometheus-stack[release-0.6] 来监控 kubernetes1.18.20,具体兼容性可以看这里:https://github.com/prometheus-operator/kube-prometheus/tree/release-0.6#kubernetes-compatibility-matrix 1 概述 1.1 在 k8s 中部署 Prometheus…

SpringBoot任务调度(官方案例)

在线文档项目结构 1.源码克隆:git clone https://github.com/spring-guides/gs-scheduling-tasks.git 2.包含两个项目initial和complete,initial可以根据文档练习完善,complete是完整项目 3.功能描述:构建应用程序,使用…

数据结构 - AVL树 (Adelson-Velsky and Landis Tree)

目录一、前言二、简介三、左旋与右旋四、AVL树的调整1、向AVL树中插入新数据1)LL型不平衡(右单旋转)2)RR型不平衡(左单旋转)3)LR型不平衡(左右双旋转)4)RL型不…