一、实验目的
1、了解数据库设计的基本步骤;
2、掌握E-R图的绘制,理解E-R图转关系模式的转换规则;
3、熟悉数据库建模工具Powerdesigner(后续简称“PD”)的使用;
4、学会从实际需求进行数据库的设计。
二、实验环境
装有软件Powerdesigner 12.5或更高版本的PC电脑一台;
三、实验步骤及实验要求
按照下面的实验内容要求完成作业,将作业结果的每一步截图粘贴到word文档中即可。每一个实验都必须编写实验报告,要求如下:
1、实验报告用word编写;
2、word文件命名的格式统一要求:为以“杨健”同学19号为例,他所做的第4次实验的实验报告应该命令为:“DB实验4— 19号—杨健”(即格式是:实验序号—课内序号—姓名);课内序号现在是一个人一门课一个号,同一个人在不同课序号会不同,回头我会将课程名单发到群里,自己查阅你自己在本门课中的序号。
3、实验报告用统一的封面,封面模板到时发给大家;
4、报告中截取每题主要步骤结果的截图、实验结果截图;
5、实验报告最后要加上实验总结,总结部分必须写出自己的切身体会;
6、实验报告如有雷同、抄袭现象,后果自负;
7、实验报告上交截止时间:上机后一周之内;
8、实验上交方式:由学委收集齐全后,统一交付老师:
四、实验内容
1、经过调查与分析,某“简易图书管理系统”涉及如下信息:
1)图书:书号、书名、作者、出版社,单价,状态(是否在馆);
2)读者类别:类别号、类别名、可借数量、可借天数;
3)读者:读者号、姓名、单位、QQ、已借书数量;
其中:每个读者可以借多种书,任何一种书可被多个读者借;在借书与还书时,要记录相应的借书日期和应还日期;每个读者类别可包含多个读者,每个读者只能属于一个读者类别。根据上述需求,利用PD完成如下任务:
1)概念结构设计:绘制概念数据模型CDM(即E-R图);
2)逻辑结构设计:由CMD生成物理数据模型PDM(即将E-R图转换为关系模式);
3)数据库的实施:CDM –>PDM –> Database(即,生成DDL,以创建数据库和数据表);
/*==============================================================*/
/* DBMS name: MySQL 5.0 */
/* Created on: 2022/10/25 15:51:57 */
/*==============================================================*/
drop table if exists book;
drop table if exists borrow;
drop table if exists many_book_many_reader;
drop table if exists reader;
drop table if exists reader_type;
/*==============================================================*/
/* Table: book */
/*==============================================================*/
create table book
(
book_id numeric(8,0) not null,
book_name varchar(20) not null,
book_auther varchar(20) not null,
book_press varchar(20),
book_price numeric(8,0),
book_status numeric(1,0) not null,
primary key (book_id)
);
/*==============================================================*/
/* Table: borrow */
/*==============================================================*/
create table borrow
(
borrow_id numeric(8,0) not null,
book_id numeric(8,0),
reader_id numeric(8,0),
borrow_out_data date not null,
borrow_ret_data date not null,
primary key (borrow_id)
);
/*==============================================================*/
/* Table: many_book_many_reader */
/*==============================================================*/
create table many_book_many_reader
(
book_id numeric(8,0) not null,
reader_id numeric(8,0) not null,
primary key (book_id, reader_id)
);
/*==============================================================*/
/* Table: reader */
/*==============================================================*/
create table reader
(
reader_id numeric(8,0) not null,
reader_type_id numeric(8,0),
reader_name varchar(20) not null,
reader_dept varchar(20),
reader_qq numeric(11,0),
reader_on_lend_number numeric(8,0) not null,
reader_type numeric(8,0) not null,
primary key (reader_id)
);
/*==============================================================*/
/* Table: reader_type */
/*==============================================================*/
create table reader_type
(
reader_type_id numeric(8,0) not null,
reader_type_name varchar(20) not null,
reader_lend_number numeric(8,0) not null,
reader_lend_day numeric(8,0) not null,
primary key (reader_type_id)
);
alter table borrow add constraint FK_one_borrow_many_book foreign key (book_id)
references book (book_id) on delete restrict on update restrict;
alter table borrow add constraint FK_one_borrow_many_reader foreign key (reader_id)
references reader (reader_id) on delete restrict on update restrict;
alter table many_book_many_reader add constraint FK_many_book_many_reader foreign key (book_id)
references book (book_id) on delete restrict on update restrict;
alter table many_book_many_reader add constraint FK_many_book_many_reader2 foreign key (reader_id)
references reader (reader_id) on delete restrict on update restrict;
alter table reader add constraint FK_many_reader_one_type foreign key (reader_type_id)
references reader_type (reader_type_id) on delete restrict on update restrict;
2、根据下面的“交通违章处罚通知书”设计数据库。
数据库——关系数据库——交通违规处罚通知书_Starzkg的博客-CSDN博客
图中显示一张交通违章处罚通知单,根据这张通知单所提供的信息,设计一个存储相关信息的E-R模型,并将这个E-R模型转换成关系数据模型,要求标注各关系模式的主键和外键(其中:一张违章通知书可能有多项处罚,例如:警告+罚款)。
1)找出实体、实体的属性、实体的主码。
:::danger
驾照信息(驾照执照号码,姓名,登记地址,邮政编码,手机号码)
车辆信息(机动车牌照号码,机动车型号,机动车制造厂,机动车生产日期)
警察(警察编号,姓名)
交通违规处罚(违规处罚编号,违章日期,查抄时间,查抄地点,违章记载,处罚方式,处罚金额,驾驶执照号码,机动车牌照号码,警察编号,警察签字,被处罚人签字) :::
2)找出实体间的联系及联系类型。
驾照信息(驾照执照号码,姓名,登记地址,邮政编码,手机号码) PK=驾照执照号码
drving_license{
dl_id
dl_name
dl_registered_address
dl_post_code
dl_phone_number
}
车辆信息(机动车牌照号码,机动车型号,机动车制造厂,机动车生产日期)PK=机动车牌照号码
vehicle_information{
vi_id
vi_model
vi_manufacturing_plant
vi_production_date
}
警察(警察编号,姓名)PK=警察编号
police{
p_id
p_name
}
交通违规处罚(违规处罚编号,违章日期,查抄时间,查抄地点,违章记载,处罚方式,处罚金额,驾驶执照号码,机动车牌照号码,警察编号,警察签字,被处罚人签字) PK=违规处罚编号 FK1=驾驶执照号码,FK2=机动车牌照号码,FK3=警察编号
traffic_violation_penalties{
tvp_id
tvp_data
tvp_time
tvp_place
tvp_illegal_records
tvp_punishment
tvp_penalty_amount
tvp_police_signature
tvp_penalty_signature
}
3)用PowerDesigner画出ER图。
4)选择MySQL作为DBMS,把ER图转换成物理模型,根据日常生活中的情况合理设置数据类型,其中通知书编号长度请参照示例“TZ11719”,警察编号长度是3个字符。在MySQL中创建违章数据库(wzdb),并利用PowerDesigner生成所有的SQL语句。
/*==============================================================*/
/* DBMS name: MySQL 5.0 */
/* Created on: 2022/10/25 16:51:02 */
/*==============================================================*/
drop table if exists drving_license;
drop table if exists police;
drop table if exists traffic_violation_penalties;
drop table if exists vehicle_information;
/*==============================================================*/
/* Table: drving_license */
/*==============================================================*/
create table drving_license
(
dl_id numeric(20,0) not null,
dl_name varchar(20) not null,
dl_registered_address varchar(30) not null,
dl_post_code numeric(6,0) not null,
dl_phone_number numeric(11,0) not null,
primary key (dl_id)
);
/*==============================================================*/
/* Table: police */
/*==============================================================*/
create table police
(
p_id numeric(3,0) not null,
p_name varchar(20) not null,
primary key (p_id)
);
/*==============================================================*/
/* Table: traffic_violation_penalties */
/*==============================================================*/
create table traffic_violation_penalties
(
tvp_id varchar(7) not null,
p_id numeric(3,0),
dl_id numeric(20,0),
vi_id numeric(6,0),
tvp_data date not null,
tvp_time time not null,
tvp_place varchar(30) not null,
tvp_illegal_records varchar(1024),
tvp_punishment numeric(1,0),
tvp_penalty_amount numeric(10,0),
tvp_police_signature varchar(20) not null,
tvp_penalty_signature varchar(20) not null,
primary key (tvp_id)
);
/*==============================================================*/
/* Table: vehicle_information */
/*==============================================================*/
create table vehicle_information
(
vi_id numeric(6,0) not null,
vi_model numeric(6,0) not null,
vi_manufacturing_plant varchar(20) not null,
vi_production_date date not null,
primary key (vi_id)
);
alter table traffic_violation_penalties add constraint FK_one_drving_license_many_traffic_violation_penalties foreign key (dl_id)
references drving_license (dl_id) on delete restrict on update restrict;
alter table traffic_violation_penalties add constraint FK_one_police_mamy_traffic_violation_penalties foreign key (p_id)
references police (p_id) on delete restrict on update restrict;
alter table traffic_violation_penalties add constraint FK_one_vehicle_information_many_traffic_violation_penalties foreign key (vi_id)
references vehicle_information (vi_id) on delete restrict on update restrict;