diff --git a/.gitignore b/.gitignore index 59beec4..8a4e0e5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ *.bkp *.swap *.o +*.dtmp +*.tmp +$* \ No newline at end of file diff --git a/DBBigWorkDesign.drawio b/DBBigWorkDesign.drawio index 53fa997..0048032 100644 --- a/DBBigWorkDesign.drawio +++ b/DBBigWorkDesign.drawio @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/表设计.xlsx b/表设计.xlsx new file mode 100644 index 0000000..d295563 Binary files /dev/null and b/表设计.xlsx differ diff --git a/设计文档.md b/设计文档.md index cf7be1d..b0a083c 100644 --- a/设计文档.md +++ b/设计文档.md @@ -4,7 +4,8 @@ 主要面向对象:我自己 -数据需求: +> 数据需求: +> - 图书信息 - 统计信息 @@ -171,7 +172,7 @@ 编号:D3 - 组成:对应图书的编号,副本编号,资源URL,大小,日期 + 组成:副本编号,资源URL,大小,日期 数据量:800条左右 @@ -185,7 +186,7 @@ 编号:D4 - 组成:图书编号,用户编号,日期,内容 + 组成:编号,日期,内容 数据量:1600条左右 @@ -233,7 +234,7 @@ 存取频度:每天100次 - 存取方式:随机CRUS + 存取方式:随机CRUD ## 概念结构设计 @@ -251,5 +252,93 @@ ### E-R图 +占位符 + +## 逻辑结构设计 + ### 转换关系 +实体转换: +- 管理员:admin(密码) + - 系统中只有一个管理员,密码只能通过直接操作数据库修改,这仅作为一个存储项,也不需要主键之类的东西。 +- 用户:user(用户ID, 用户名, 用户邮箱, 用户密码, 用户配额, 注册日期) + +- 图书:book(图书ID,ISBN,出版社,日期,语言,标题) + +- 文件:document(文件ID,资源URL,大小,日期,类型,副本名) + +- 笔记:note(笔记ID,日期,内容,标题) + +- 类型:type(类型ID, 类型名称) + +- 作者:author(作者ID, 作者姓名) + +联系转换: + +- 管理:管理不直接通过数据表体现,因此不需要添加任何的关系。 +- 拥有:一对多关系,因此在图书里面添加外键用户ID,修改图书关系为book(图书ID,用户ID(**FK ref user**),ISBN,出版社,日期,语言, 标题) +- 存取:一对多关系,但是由于该联系有自己的属性,所有单独新建一个关系 record(记录ID,时间,操作类型,用户ID,文件URL)。由于这里可能涉及到删除操作,因此使用外键,仅保留存取记录。 +- 对应:一对多关系,直接在文件里面添加外键图书ID,修改文件关系为document(文件ID,图书ID(**FK ref book**),资源URL,大小,日期) +- 图书-笔记:一对多关系,直接在笔记关系中增加外键,修改关系为note(笔记ID,图书ID(**FK ref book**),日期,内容) +- 图书-作者:多对多关系,单独建立一个关系book_author(图书ID(**FK ref book**),作者ID(**FK ref author**)) +- 图书-类型:多对多关系,单独建立一个关系book_type(图书ID(**FK ref book**),类型ID(**FK ref type**)) + +### 关系模式优化 + +#### 函数依赖集和范式 + +book_author、book_type两个为全码,无非主属性,必然满足BCNF + +其余关系的函数依赖集如下: + +- type:`{类型ID->类型名称}` +- author:`{作者ID->作者姓名}` +- user:`{用户ID->用户名, 用户ID->用户邮箱, 用户ID->用户密码, 用户ID->用户配额, 用户ID->注册日期}` +- book:`{图书ID->用户ID, 图书ID->ISBN, 图书ID->出版社, 图书ID->日期, 图书ID->语言, 图书ID->标题}` +- document:`{文件ID->图书ID, 文件ID->资源URL, 文件ID->大小, 文件ID->日期}` +- note:`{笔记ID->图书ID, 笔记ID->日期, 笔记ID->内容, 笔记ID->标题}` +- record:`{记录ID->用户ID, 记录ID->操作类型, 记录ID->时间, 记录ID->文件URL}` + +可以看出,他们均为非主属性对码的完全函数依赖,满足BCNF。 + +#### 其他优化 + +冗余设计: + +- 因为用户可能会经常需要看自己发布的笔记,虽然可以通过先查book表再查note,但是这样会降低查询效率,因此在note关系中添加用户ID。对于document也需要做同样的冗余属性列的添加,以提高某些情况下的查询效率。 +- 建立一个用户的统计数据表,里面存放了用户占用的存储空间、创建的图书数量、种类等信息,可以减少查询时的数据库压力。 + +简化属性: + +- 由于时间戳是唯一的,因此在record这种不需要更新的表中,可以用时间戳来代替ID作为主键。 + +安全性设计: + +- 数据加密:用户的密码通过加盐md5的方式存储在数据库中 +- SQL注入预防,交给框架来完成 + +完整性约束: + +- 实体完整性:各个关系的主键 +- 参照完整性:。。。表中的外键 +- 自定义完整性:用户占用的存储空间不能超过配额,也就是用户的文件关系中,文件大小属性之和不能大于用户的配额。 + +触发器: + +- book_author和book_type这两个联系由数据库自动更新,当插入一本图书的时候,通过触发器来插入表记录,同时维护author表和type表。 +- 对于book表、document表、author表和type表,在更改时自动更新统计信息表 + +## 物理结构设计 + +### 存储结构 + +- 存放位置为本地 +- 存储结构为单机关系型数据库 + +### 数据存取 + +- 对于type、author、user这三个表而言,一般只需要通过ID查询,因此无需建立额外的索引优化,直接用主键索引即可。book_author、book_type这两个全码表更是如此。 +- 对于book、document、note、record有对于非主属性的联合和范围查询的需求,主要是对日期的范围查询,对于类型、作者等属性的联合查询。其中,对于范围较小的属性,如图书的语言、出版社、类型等属性,可以不建立索引。对于标题、日期等范围较大的索引,根据启发式规则建立相应的索引。 + +## 最终的表设计 +