前言:不知道啥原因,最后设计出来少了一个表,无语
实验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.实验总结
本次实验的重点在于概念结构的设计以及逻辑结构的设计;逻辑结构设计虽然可以按照一定的规则从概念结构 转换而来,但是由于概念结构通常比较抽象,较少考虑更多细节较少考虑更多细节,因此转换而成的 逻辑结构还需要进一步调整和优化。
这次的概念结构选择了实验指导书中一直使用的采购、销售和客户管理应用数据库,较为复杂,但是比较更能学好概念结构设计和逻辑结构设计。