一、实验目的
    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图);
    image.png
    2)逻辑结构设计:由CMD生成物理数据模型PDM(即将E-R图转换为关系模式);
    image.png
    3)数据库的实施:CDM –>PDM –> Database(即,生成DDL,以创建数据库和数据表);

    1. /*==============================================================*/
    2. /* DBMS name: MySQL 5.0 */
    3. /* Created on: 2022/10/25 15:51:57 */
    4. /*==============================================================*/
    5. drop table if exists book;
    6. drop table if exists borrow;
    7. drop table if exists many_book_many_reader;
    8. drop table if exists reader;
    9. drop table if exists reader_type;
    10. /*==============================================================*/
    11. /* Table: book */
    12. /*==============================================================*/
    13. create table book
    14. (
    15. book_id numeric(8,0) not null,
    16. book_name varchar(20) not null,
    17. book_auther varchar(20) not null,
    18. book_press varchar(20),
    19. book_price numeric(8,0),
    20. book_status numeric(1,0) not null,
    21. primary key (book_id)
    22. );
    23. /*==============================================================*/
    24. /* Table: borrow */
    25. /*==============================================================*/
    26. create table borrow
    27. (
    28. borrow_id numeric(8,0) not null,
    29. book_id numeric(8,0),
    30. reader_id numeric(8,0),
    31. borrow_out_data date not null,
    32. borrow_ret_data date not null,
    33. primary key (borrow_id)
    34. );
    35. /*==============================================================*/
    36. /* Table: many_book_many_reader */
    37. /*==============================================================*/
    38. create table many_book_many_reader
    39. (
    40. book_id numeric(8,0) not null,
    41. reader_id numeric(8,0) not null,
    42. primary key (book_id, reader_id)
    43. );
    44. /*==============================================================*/
    45. /* Table: reader */
    46. /*==============================================================*/
    47. create table reader
    48. (
    49. reader_id numeric(8,0) not null,
    50. reader_type_id numeric(8,0),
    51. reader_name varchar(20) not null,
    52. reader_dept varchar(20),
    53. reader_qq numeric(11,0),
    54. reader_on_lend_number numeric(8,0) not null,
    55. reader_type numeric(8,0) not null,
    56. primary key (reader_id)
    57. );
    58. /*==============================================================*/
    59. /* Table: reader_type */
    60. /*==============================================================*/
    61. create table reader_type
    62. (
    63. reader_type_id numeric(8,0) not null,
    64. reader_type_name varchar(20) not null,
    65. reader_lend_number numeric(8,0) not null,
    66. reader_lend_day numeric(8,0) not null,
    67. primary key (reader_type_id)
    68. );
    69. alter table borrow add constraint FK_one_borrow_many_book foreign key (book_id)
    70. references book (book_id) on delete restrict on update restrict;
    71. alter table borrow add constraint FK_one_borrow_many_reader foreign key (reader_id)
    72. references reader (reader_id) on delete restrict on update restrict;
    73. alter table many_book_many_reader add constraint FK_many_book_many_reader foreign key (book_id)
    74. references book (book_id) on delete restrict on update restrict;
    75. alter table many_book_many_reader add constraint FK_many_book_many_reader2 foreign key (reader_id)
    76. references reader (reader_id) on delete restrict on update restrict;
    77. alter table reader add constraint FK_many_reader_one_type foreign key (reader_type_id)
    78. references reader_type (reader_type_id) on delete restrict on update restrict;

    2、根据下面的“交通违章处罚通知书”设计数据库。
    数据库——关系数据库——交通违规处罚通知书_Starzkg的博客-CSDN博客
    图中显示一张交通违章处罚通知单,根据这张通知单所提供的信息,设计一个存储相关信息的E-R模型,并将这个E-R模型转换成关系数据模型,要求标注各关系模式的主键和外键(其中:一张违章通知书可能有多项处罚,例如:警告+罚款)。
    图 1-1
    1)找出实体、实体的属性、实体的主码。 :::danger 驾照信息(驾照执照号码,姓名,登记地址,邮政编码,手机号码)

    车辆信息(机动车牌照号码,机动车型号,机动车制造厂,机动车生产日期)

    警察(警察编号,姓名)

    交通违规处罚(违规处罚编号,违章日期,查抄时间,查抄地点,违章记载,处罚方式,处罚金额,驾驶执照号码,机动车牌照号码,警察编号,警察签字,被处罚人签字) :::  

    2)找出实体间的联系及联系类型。
    驾照信息(驾照执照号码,姓名,登记地址,邮政编码,手机号码) PK=驾照执照号码

    1. drving_license{
    2. dl_id
    3. dl_name
    4. dl_registered_address
    5. dl_post_code
    6. dl_phone_number
    7. }

    车辆信息(机动车牌照号码,机动车型号,机动车制造厂,机动车生产日期)PK=机动车牌照号码

    1. vehicle_information{
    2. vi_id
    3. vi_model
    4. vi_manufacturing_plant
    5. vi_production_date
    6. }

    警察(警察编号,姓名)PK=警察编号 

    1. police{
    2. p_id
    3. p_name
    4. }

    交通违规处罚(违规处罚编号,违章日期,查抄时间,查抄地点,违章记载,处罚方式,处罚金额,驾驶执照号码,机动车牌照号码,警察编号,警察签字,被处罚人签字) PK=违规处罚编号 FK1=驾驶执照号码,FK2=机动车牌照号码,FK3=警察编号 

    1. traffic_violation_penalties{
    2. tvp_id
    3. tvp_data
    4. tvp_time
    5. tvp_place
    6. tvp_illegal_records
    7. tvp_punishment
    8. tvp_penalty_amount
    9. tvp_police_signature
    10. tvp_penalty_signature
    11. }

    3)用PowerDesigner画出ER图。
    image.png
    image.png

    4)选择MySQL作为DBMS,把ER图转换成物理模型,根据日常生活中的情况合理设置数据类型,其中通知书编号长度请参照示例“TZ11719”,警察编号长度是3个字符。在MySQL中创建违章数据库(wzdb),并利用PowerDesigner生成所有的SQL语句。

    1. /*==============================================================*/
    2. /* DBMS name: MySQL 5.0 */
    3. /* Created on: 2022/10/25 16:51:02 */
    4. /*==============================================================*/
    5. drop table if exists drving_license;
    6. drop table if exists police;
    7. drop table if exists traffic_violation_penalties;
    8. drop table if exists vehicle_information;
    9. /*==============================================================*/
    10. /* Table: drving_license */
    11. /*==============================================================*/
    12. create table drving_license
    13. (
    14. dl_id numeric(20,0) not null,
    15. dl_name varchar(20) not null,
    16. dl_registered_address varchar(30) not null,
    17. dl_post_code numeric(6,0) not null,
    18. dl_phone_number numeric(11,0) not null,
    19. primary key (dl_id)
    20. );
    21. /*==============================================================*/
    22. /* Table: police */
    23. /*==============================================================*/
    24. create table police
    25. (
    26. p_id numeric(3,0) not null,
    27. p_name varchar(20) not null,
    28. primary key (p_id)
    29. );
    30. /*==============================================================*/
    31. /* Table: traffic_violation_penalties */
    32. /*==============================================================*/
    33. create table traffic_violation_penalties
    34. (
    35. tvp_id varchar(7) not null,
    36. p_id numeric(3,0),
    37. dl_id numeric(20,0),
    38. vi_id numeric(6,0),
    39. tvp_data date not null,
    40. tvp_time time not null,
    41. tvp_place varchar(30) not null,
    42. tvp_illegal_records varchar(1024),
    43. tvp_punishment numeric(1,0),
    44. tvp_penalty_amount numeric(10,0),
    45. tvp_police_signature varchar(20) not null,
    46. tvp_penalty_signature varchar(20) not null,
    47. primary key (tvp_id)
    48. );
    49. /*==============================================================*/
    50. /* Table: vehicle_information */
    51. /*==============================================================*/
    52. create table vehicle_information
    53. (
    54. vi_id numeric(6,0) not null,
    55. vi_model numeric(6,0) not null,
    56. vi_manufacturing_plant varchar(20) not null,
    57. vi_production_date date not null,
    58. primary key (vi_id)
    59. );
    60. alter table traffic_violation_penalties add constraint FK_one_drving_license_many_traffic_violation_penalties foreign key (dl_id)
    61. references drving_license (dl_id) on delete restrict on update restrict;
    62. alter table traffic_violation_penalties add constraint FK_one_police_mamy_traffic_violation_penalties foreign key (p_id)
    63. references police (p_id) on delete restrict on update restrict;
    64. alter table traffic_violation_penalties add constraint FK_one_vehicle_information_many_traffic_violation_penalties foreign key (vi_id)
    65. references vehicle_information (vi_id) on delete restrict on update restrict;

    image.png