一、实验目的
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_iddl_namedl_registered_addressdl_post_codedl_phone_number}
车辆信息(机动车牌照号码,机动车型号,机动车制造厂,机动车生产日期)PK=机动车牌照号码
vehicle_information{vi_idvi_modelvi_manufacturing_plantvi_production_date}
警察(警察编号,姓名)PK=警察编号
police{p_idp_name}
交通违规处罚(违规处罚编号,违章日期,查抄时间,查抄地点,违章记载,处罚方式,处罚金额,驾驶执照号码,机动车牌照号码,警察编号,警察签字,被处罚人签字) PK=违规处罚编号 FK1=驾驶执照号码,FK2=机动车牌照号码,FK3=警察编号
traffic_violation_penalties{tvp_idtvp_datatvp_timetvp_placetvp_illegal_recordstvp_punishmenttvp_penalty_amounttvp_police_signaturetvp_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;

