做科研找论文的网站软件项目管理心得
web/
2025/9/29 20:25:04/
文章来源:
做科研找论文的网站,软件项目管理心得,寻花问柳专注做男人喜爱的网站,网上免费咨询律师电话数据库系统 课程实验3数据库设计
计科210X 甘晴void 202108010XXX
目录 文章目录 数据库系统 课程实验3br数据库设计实验目的实验内容实验重难点实验环境实验过程#xff08;0#xff09;数据库需求描述#xff08;1#xff09;数据库概念结构设计E-R图实体图书馆…数据库系统 课程实验3数据库设计
计科210X 甘晴void 202108010XXX
目录 文章目录 数据库系统 课程实验3br数据库设计实验目的实验内容实验重难点实验环境实验过程0数据库需求描述1数据库概念结构设计E-R图实体图书馆library图书book出版社press注册读者reader访客visitor管理员admin 关系借阅borrow查询query 【初步使用PowerDesigner】①新建一个“概念模型”文件②使用工具框绘制实体并连接关系③编辑实体属性④编辑关系的特征⑤检查模型 【操作】 2数据库逻辑结构设计【操作】 3数据库物理结构设计【操作】 4SQL语句生成【操作】代码验证 参考文献实验感悟 实验目的
掌握数据库设计的基本方法及数据库设计工具。
实验内容
掌握数据库设计的基本步骤包括数据库概念结构设计、逻辑结构设计物理结构设计数据库模式 SQL 语句生成。能够使用数据库设计工具进行数据库设计。
实验重难点
实验重点概念结构设计、逻辑结构设计。
实验难点逻辑结构设计。逻辑结构设计虽然可以按照一定的规则从概念结构转换而来但是由于概念结构通常比较抽象较少考虑更多细节因此转换而成的逻辑结构还需要进一步调整与优化。逻辑结构承接概念结构和物理结构处于核心地位因此是数据库设计的重点和难点。
实验环境
DBMS8.0.33 MySQL Community Server - GPL
可视化Navicat Premium 16.1.6
命令行Navicat自带命令列
Powerdesigner
实验过程
0数据库需求描述
设计一个图书馆管理系统有注册读者访客管理员三种身份需要管理图书的信息以及它的出版与存放地点信息。一个注册读者能借阅多本图书一本图书在不同的时间能被不同读者借阅。一个访客能查询多本图书一本图书能被多个访客查询。一个管理员管理图书访客注册读者该图书由该管理员经手该访客或注册读者由该管理员引导。一本图书只能放在一个图书馆里一本图书只能由一个出版社所出版。
对于借阅记录借阅发生的时间应该归还的时间是否可以续借借阅的终端地址。对于查询记录查询发生的时间以及查询发生的终端地址。
1数据库概念结构设计
E-R图
从需求描述中抽象出用于描述关系的E-R图如下。 实体
从需求描述中识别出以下6个实体并分别为它们赋予属性。
图书馆library
图书馆编号library_id图书馆名library_name图书馆联系电话library_tel图书馆地址library_address
图书book
图书编号book_id图书名称book_name图书作者book_writer图书编号book_pressid图书出版日期book_pressdate图书ISBNbook_isbn图书价格book_price图书副本数量book_copynum
出版社press
出版社编号press_id出版社名press_name出版社联系电话press_tel出版社地址press_address
注册读者reader
读者编号reader_id读者姓名reader_name读者性别reader_sex读者电话号码reader_tel读者邮箱地址reader_email读者证件类型reader_doc读者证件号码reader_docid读者注册日期reader_registerdate读者备注reader_others
访客visitor
访客编号visitor_id访客注册日期visitor_registerdate
管理员admin
管理员编号admin_id管理员姓名admin_name管理员性别admin_sex管理员电话号码admin_tel管理员邮箱地址admin_email管理员入职时间admin_registerdate管理员职位admin_pos
关系
关系在逻辑结构设计时补入完善的ER图中这里先列出来。
借阅borrow
借阅日期borrow_date应归还日期borrow_expect_returndate是否可续借borrow_ifrenew是否归还borrow_ifreturn最终归还日期borrow_returndate借阅时间borrow_time借阅终端地址borrow_terminal(3位)
查询query
查询时间query_time查询终端地址query_terminal
【初步使用PowerDesigner】
使用PowerDesigner可以很方便的绘制ER图下面简单叙述该软件的初步操作。
①新建一个“概念模型”文件 ②使用工具框绘制实体并连接关系
【注意】对于相似的实体千万不要偷懒用ctrlcv的方法这个复制过去的不是一个新的副本它更像是一个链接用人话说就是你修改了复制本或者原本这两个都会跟着一起变化很烦多花了好多时间。一定要自己新建出一个实体去写。 ③编辑实体属性
双击实体可以编辑实体属性第一个Name是显示的中文第二个Code是代码中呈现的。
点击Attributes设置实体的属性以及一些特征 词条具体含义如下
Name实体名字一般为中文这是显示在图上给人看的Code实体代号,一般用英文这是写在代码里的一定要用英文不然无法生成代码Data Type实体的数据类型Length实体的数据长度Domain域表示属性取值范围如可以创建10个字符的地址域MMandatory强制属性表示该属性必填。不能为空相当于NOT NULLPPrimary Identifer是否是主标识符表示实体唯一标识符相当于 PRIMARY KEY UNIQUEDDisplayed显示出来默认全部勾选这个要选上否则就隐藏了
④编辑关系的特征
同样地双击关系也可编辑相应特征。
这里可以调节映射关系是1:1还是1:n还是n:m。
⑤检查模型
实际上可有可无如果能正常生成一般是没有问题的。
如果出现这样的错误 解决办法是把这两个勾去掉不检查这两项即可。 【操作】
使用PowerDesigner绘制数据库概念模型图如下 2数据库逻辑结构设计
根据上述E-R图以及实体属性使用PowerDesigner设计数据库逻辑结构。
E-R图向关系模型的转换规则
一个1:1联系可以转换为一个独立的关系模式也可以与任意一端对应的关系模式合并。一个1:n联系可以转换为一个独立的关系模式也可以与n端对应的关系模式合并。一个m:n联系只能转换为一个关系模式三个或三个以上实体间的一个多元联系转换为一个关系模式。具有相同码的关系模式可合并
事实上powerdesigner就是按照这个来的最终它会合并所有1:1和1:n的关系并为所有m:n的关系生成一个新的关系表
【操作】
使用PowerDesigner创建数据库逻辑模型ToolGenerate Logical Data Model即可生成数据库逻辑模型直接点击生成即可不需要做其它修改。生成如下 这是它为我们生成的我们可以看到多出来两个深色的部分这就是为我们生成的两个新的关系表这基本上只有在n:m的时候才会生成。但实际上这还是不符合我们的预期的比如对于借阅我肯定要知道借阅发生的时间应该归还的时间以及是否可以续借等等这些额外的附加信息对于查询我可能想知道查询发生的时间以及查询发生的终端地址等等这些就需要我们手动对深色部分的模型作出更改。
对这两个关系表进行更改后得到模型如下 3数据库物理结构设计
数据库物理结构首先根据逻辑结构自动转换生成然后根据应用需求设计数据库的索引结构、存储结构。
选择索引存取方法数据库会自动为每个关系的主码建立索引。对于该系统不需要建立其他索引。
【操作】
使用PowerDesigner创建数据库逻辑模型ToolGenerate Physical Data Model即可生成数据库逻辑模型这里要注意修改这个数据库为我们自己用的数据库话说这个MySQL5.0是不是有点老了。 结果如下 4SQL语句生成
这一步可以自动生成SQL代码。
【操作】
使用PowerDesigner创建数据库逻辑模型DatabaseGenerateDatabase即可生成。这里可以设置文件的保存路径和文件名。 代码
最后生成的代码如下。
/**/
/* DBMS name: MySQL 5.0 */
/* Created on: 2023/12/12 21:41:42 */
/**/drop table if exists admin;drop table if exists book;drop table if exists book_reader;drop table if exists book_visitor;drop table if exists library;drop table if exists press;drop table if exists reader;drop table if exists visitor;/**/
/* Table: admin */
/**/
create table admin
(admin_id char(12) not null,admin_name varchar(30) not null,admin_sex char(2) not null,admin_tel varchar(11) not null,admin_email varchar(50) not null,admin_registerdate date not null,admin_pos varchar(30) not null,primary key (admin_id)
);/**/
/* Table: book */
/**/
create table book
(book_id char(50) not null,press_id char(5),admin_id char(12),library_id char(5),book_name varchar(50) not null,book_writer varchar(30) not null,book_pressid char(5) not null,book_pressdate date not null,book_isbn char(17) not null,book_price float not null,book_copynum int not null,primary key (book_id)
);/**/
/* Table: book_reader */
/**/
create table book_reader
(book_id char(50) not null,reader_id char(12) not null,borrow_date date not null,borrow_expect_returndate date not null,borrow_ifrenew char(1) not null,borrow_ifreturn char(1) not null,borrow_returndate date,borrow_time time not null,borrow_terminal char(3) not null,primary key (book_id, reader_id)
);/**/
/* Table: book_visitor */
/**/
create table book_visitor
(vistor_id char(12) not null,book_id char(50) not null,query_time time not null,query_terminal char(3) not null,primary key (vistor_id, book_id)
);/**/
/* Table: library */
/**/
create table library
(library_id char(5) not null,library_name varchar(30) not null,library_tel char(8) not null,library_address varchar(50) not null,primary key (library_id)
);/**/
/* Table: press */
/**/
create table press
(press_id char(5) not null,press_name varchar(30) not null,press_tel char(8) not null,press_address varchar(50) not null,primary key (press_id)
);/**/
/* Table: reader */
/**/
create table reader
(reader_id char(12) not null,admin_id char(12),reader_name varchar(30) not null,reader_sex char(2) not null,reader_tel char(11) not null,reader_email varchar(50) not null,reader_doc varchar(30) not null,reader_docid varchar(50) not null,reader_registerdate date not null,reader_others varchar(256),primary key (reader_id)
);/**/
/* Table: visitor */
/**/
create table visitor
(vistor_id char(12) not null,admin_id char(12),vistor_registerdate date not null,primary key (vistor_id)
);alter table book add constraint FK_admin_book foreign key (admin_id)references admin (admin_id) on delete restrict on update restrict;alter table book add constraint FK_book_library foreign key (library_id)references library (library_id) on delete restrict on update restrict;alter table book add constraint FK_book_press foreign key (press_id)references press (press_id) on delete restrict on update restrict;alter table book_reader add constraint FK_book_reader foreign key (book_id)references book (book_id) on delete restrict on update restrict;alter table book_reader add constraint FK_book_reader2 foreign key (reader_id)references reader (reader_id) on delete restrict on update restrict;alter table book_visitor add constraint FK_book_visitor foreign key (vistor_id)references visitor (vistor_id) on delete restrict on update restrict;alter table book_visitor add constraint FK_book_visitor2 foreign key (book_id)references book (book_id) on delete restrict on update restrict;alter table reader add constraint FK_admin_reader foreign key (admin_id)references admin (admin_id) on delete restrict on update restrict;alter table visitor add constraint FK_admin_visitor foreign key (admin_id)references admin (admin_id) on delete restrict on update restrict;
验证
使用Navicat访问该sql。
在Navicat左边栏连接本地数据库新建一个library数据库 在左边栏右击library运行SQL文件… 设置在遇到“错误”继续运行可能有错误这是正常现象因为我们设置了很多非空而实际上我们还没有导入数据。
成功运行之后可以见到界面如下我们成功建立了一个数据库。 使用Navicat自带的数据生成功能生成数据下面是生成书的作者名字的一个示例。这些每个属性值都是可以我们自己指定规则或者给予引导的也可以用正则表达式或者枚举来限制生成的结果。
【注意】由于书本我们定义了外键所以要先人为写好至少一条admin,press,library的信息否则book没法生成因为外键是NOT NULL且没法被填充。 根据对应的规则生成出来关于书的数据部分如下这里就没有去考虑一些细节只是做做一个范例。 对于左边的这些表格都可以做数据生成。 然后就可以在这个基础上做数据查询更新等等操作了。
如果导入的是真实的数据就可以做一个真正的图书馆数据库系统。
当然还要加上java或php写的前端这就不是本次实验涉及的内容了是大作业需要考虑的了。
参考文献
https://blog.csdn.net/weixin_63246738/article/details/128744120
https://www.imangodoc.com/pFUil7ts.html
https://blog.csdn.net/Aaron503/article/details/128280233
https://blog.csdn.net/qq_51684393/article/details/128413966
实验感悟
实验没有太大的难度主要的时间花在思考我要做什么以及探索PowerDesigner的使用上。有几点感悟如下。
需求分析太重要。不得不说一个明确的需求分析真的是太重要太重要了如果知道想要做什么有明确的需求的话完成几个部分的设计真的不是很难的事情。但如果需求分析没有做好后面真的就没办法开展。
PowerDesigner很好用。这个工具真的是太强大了首先是很用户友好对于一个纯新手看看教程短时间可以上手。此外是逻辑很清晰看看这张图左边的栏从上往下依次就是“概念模型”“逻辑模型”“物理模型”最后再生成SQL代码。工具清晰加上思路清晰就能很快完成任务。 实验过程有意义。算是完整地走了一遍很简单的数据库雏形设计挺有价值为以后大作业奠定了一些基础。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84078.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!