数据库设计说明书
G.1 引言
G.1.1 编写目的
数据库的表结构设计是整个项目开发中一个非常重要的环节,一个良好的数据库设计,可以提高开发效率,方便系统维护,并且为以后项目功能的扩展留下余地。我们通过书写这份文档说明,从各方面进行对校园地图的数据库设计规划,用它指导该系统在数据库各方面的内容,为系统开发的程序员、系统分析员提供基准文档。我们也希望通过写数据设计说明书,规范数据名称、数据范围、数据代码等。这份文档是项目小组共同作战的基础,有了开发规范、程序模块之间和项目成员之间的接口规则、数据方式,大家就有了共同的工作语言、共同的工作平台,使整个软件开发工作可以协调有序地进行。
G.1.2 背景
说明:
a、说明待开发的数据库的名称和使用此数据库的软件系统的名称;
b、列出该软件系统开发项目的任务提出者,用户以及将安装该软件和这个数据库的计算站(中心)。
a) 待开发的数据库名称:weixinxiaochengxu
c) 本项目的任务提出者:老师引导下同学们共同讨论的结果;
d) 开发者:罗子建 金成哲 陆冠臣
e) 用户:在校大学生 校外游客
G.1.3 定义
列出本文件中用到的专门术语的定义、外文首字母组词的原词组。
词汇名称 |
词汇定义 |
备注 |
C/S |
客户端/服务器 |
Client/Server 的缩写 |
SQL(structured Query Language)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。 |
||
Django |
Django采用了MVT的框架模式,即模型M,视图V和模版T。 |
|
E-R图 |
实体-联系图,提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。 |
Entity -Relationship 的缩写 |
G.1.4 参考资料
《玩转django2.0》——黄永翔 清华大学出版社 2018-11
《从零开始学微信小程序开发》——高洪涛 电子工业出版社 2018-2
《微信小程序快速开发》——易伟 人民邮电出版社 2017-5
G.2 外部设计
G.2.1 标识符和状态
数据库软件的名称:mysql 5.7
数据库的名称:weixinxiaochengxu
表名 |
标识符或名称 |
描述信息 |
状态 |
标记点表 |
标记点id |
用来保存校园标记点的位置以及相关描述 |
使用 |
用户表 |
用户id |
用来保存用户信息 |
使用 |
功能表 |
功能id |
用来保存地点的功能描述以及标签分类 |
使用 |
讨论表 |
讨论id |
用来保存发布的讨论 |
使用 |
讨论图片表 |
讨论图片id |
用来保存上传的讨论图片 |
使用 |
评论表 |
评论id |
用来保存发布的评论 |
使用 |
轮播图片表 |
轮播图片id |
用来保存系统发布的轮播图片 |
使用 |
G.2.2 使用它的程序
列出将要使用或记问此数据库的所有应用程序,对于这些应用程序的每一,给出它的名称和版本号。
应用程序 |
访问的数据表 |
版本号 |
系统登陆 |
用户表 |
1.0 |
学生认证 |
用户表 |
1.0 |
查看清水河地图 |
标记点表 |
1.0 |
查看沙河地图 |
标记点表 |
1.0 |
发布讨论 |
讨论表,讨论图片表 |
1.0 |
查看讨论 |
讨论表,讨论图片表 |
1.0 |
点击轮播图 |
轮播图片表 |
1.0 |
发布评论 |
评论表 |
1.0 |
查看评论 |
评论表 |
1.0 |
查看功能 |
功能表 |
1.0 |
历史关注 |
讨论表,评论表,讨论图片表 |
1.0 |
G.2.3 约定
陈述一个程序员或一个系统分析员为了能使用此数据库而需要了解的建立标号、标识的约定,例如用于标识数据库的不同版本的约定,用于标识库内各个文卷、记录、数据项的命名约定等。
文卷 |
记录 |
数据项的命名约定 |
标记点表 |
Location |
无 |
用户表 |
User |
无 |
功能表 |
Function |
无 |
讨论表 |
Discussion |
无 |
讨论图片表 |
DiscussionImage |
无 |
评论表 |
无 |
|
轮播图片表 |
RollingImage |
无 |
G.2.4 专门指导
准备从事此数据库的生成、从事此数据库的测试、维护人员提供专门的指导。
G.2.5 支持软件
简单介绍同此数据库直接有关的支持软件,如数据库管理系统、存储定位程序、用于装入、生成、修改、更新数据库的程序等。说明这些软件的名称、版本号和主要功能我,如所用数据模型的类型、允许的数据容量等。列出这些支持软件的技术文件的标题,缩号及来源。
支持软件名称 |
版本号 |
主要功能 |
Mysql |
5.7 |
建立数据库并提供数据库维护与管理功能 |
Django |
2.2.1 |
后端框架,为小程序提供数据库的技术支持 |
Python |
3.6.5 |
代码编写 |
javascript |
脚本语言,提供HTTP的技术支持 |
|
navicat |
管理员工具 |
G.3 结构设计
系统按照微信小程序官方文档的统一规划,运行在weixinxiaochengxu数据库中,采用了数据库的热备份技术,实现数据的有效和安全。
G.3.1 概念结构设计
说明本数据库将反映的现实世界中的实体,属性和它们之间的关系等的原始数据形式,包括各数据项、记录、系、文卷的标识符、定义、类型、度量单位和值哉,建立本数据库的每一幅用户视图。
用户模块
用户信息(用户名称,学生认证状态,历史关注,用户哈希名,用户id)
历史关注(我的发布,我的讨论)
我的发布:功能id
我的讨论:讨论id
其中属性约束如下:
学生认证状态:已认证,未认证
学生认证模块
学生认证(学号,密码)
发布介绍模块
发布介绍(标签,描述)
其中属性约束为:
标签为系统固定安排的,用户不能自己添加
发布讨论模块
发布讨论(想法,讨论图片)
评论模块
参与评论(评论内容)
搜索模块
搜索(搜索目标,功能标签)
其中属性约束为:
搜索目标为系统提供的标签选项,用户不能自己添加。
全局E-R 图如下
G.3.2 逻辑结构设计
说明把上述原始数据进行分解、合并后重新组织起来的数据库全局逻辑结构,包括所确定的关键字和属性、重新确定的记录结构和文卷结构、所建立的各个文卷之间的相互关系,形成本数据库的数据库管理员视图。
用户表记录用户登陆账号以及学生认证等基本信息
表 User 的结构
字段名 |
数据类型 |
长度 |
主键 |
非空 |
描述 |
用户id |
整数 |
20 |
是 |
是 |
自增 |
用户头像URL |
URL |
是 |
用户头像,上传到数据库转换成对应的URL格式 |
||
用户昵称 |
字符串 |
20 |
在讨论和评论界面里展示的用户昵称 |
||
用户哈希名 |
字符串 |
20 |
为维护系统安全,采用md5算法进行传输 |
功能表记录标记点的功能展示
表 Function 的结构
字段名 |
数据类型 |
长度 |
主键 |
非空 |
描述 |
功能id |
整数 |
20 |
是 |
是 |
自增 |
功能描述 |
字符串 |
20 |
针对某地点的功能描述 |
||
地点id |
整数 |
20 |
该功能对应的标记点 |
||
发布用户id |
整数 |
20 |
发布用户标识符 |
标记点表记录校园地图的地点描述以及具体地理位置
表 Location 的结构
字段名 |
数据类型 |
长度 |
主键 |
非空 |
描述 |
标记点id |
整数 |
20 |
是 |
是 |
自增 |
标记点名 |
字符串 |
20 |
标记位置的具体名称 |
||
经度 |
浮点类型 |
9 |
地理参数 |
||
纬度 |
浮点类型 |
9 |
地理参数 |
||
地点描述 |
字符串 |
20 |
针对该地点的地理特征描述 |
讨论表记录用户发布讨论的内容
表 Discussion 的结构
字段名 |
数据类型 |
长度 |
主键 |
非空 |
描述 |
讨论id |
整数 |
20 |
是 |
是 |
自增 |
发布用户id |
整数 |
20 |
发布用户,方便添加到历史关注界面中显示 |
||
地点id |
整数 |
20 |
针对该地点的讨论 |
||
讨论内容 |
字符串 |
140 |
具体讨论内容 |
讨论图片表记录用户发布讨论的图片信息
表 DiscussionImage 的结构
字段名 |
数据类型 |
长度 |
主键 |
非空 |
描述 |
讨论图片id |
整数 |
20 |
是 |
是 |
自增 |
图片URL |
URL |
经过md5算法处理后的图片 |
|||
讨论id |
整数 |
20 |
确定参与讨论的标识符 |
||
文件名 |
字符串 |
20 |
图片名 |
||
文件格式 |
字符串 |
20 |
|||
文件大小 |
文件格式 |
10MB |
图片大小 |
||
创建时间 |
时间格式 |
图片创建时间 |
|||
上传时间 |
时间格式 |
图片上传时间 |
评论表记录用户参与评论的信息
表 Comment 的结构
字段名 |
数据类型 |
长度 |
主键 |
非空 |
描述 |
评论id |
整数 |
20 |
是 |
是 |
自增 |
讨论id |
整数 |
20 |
用于标识参与讨论的外键 |
||
评论内容 |
字符串 |
140 |
参与评论的文字内容 |
||
评论者用户id |
整数 |
20 |
发布评论的用户id |
||
被评论者用户id |
整数 |
20 |
被评论者用户id |
轮播图片表记录小程序整体的轮播图片
表 RollingImage 的结构
字段名 |
数据类型 |
长度 |
主键 |
非空 |
描述 |
轮播图片id |
整数 |
20 |
是 |
是 |
唯一标识轮播图片的标识符 |
标记点id |
整数 |
20 |
记录该地点的轮播图 |
||
轮播图片URL |
URL |
转换为Md5 算法后的URL |
G.3.3 物理结构设计
数据库名称为: weixinxiaochengxu
存储位置:默认位置
建立系统程序员视图,包括:
通过上面的逻辑结构分析所得到表的关系,下面使用 Django 框架 设计并得到数据库和相应的表
创建 User 表
class User(models.Model):
UserId = models.Autofield(primary_key=True, null=False)
UserUrl = models.URLField()
UserNickName = models.CharField()
UserHash = models.CharField()
创建 Location 表
class Location(models.Model):
LocationId = models.AutoField(primary_key=True, null=False)
LocationName = models.CharField(max_length=20)
Latitude = models.FloatField(9, 6) # 经度
Longitude = models.FloatField(9, 6) # 纬度
LocationDescription = models.CharField(max_length=20)
创建Function 表
class Function(models.Model):
FunctionId = models.AutoField(primary_key=True, null=False)
FunctionDescription = models.TextField(max_length=200)
LocationId = models.foreignkey(Location, on_delete=models.CASCADE)
PublishUserId=models.ForeignKey(UserInformation,on_delete=models.CASCADE)
创建Discussion 表
class Discussion(models.Model):
DiscussionId = models.AutoField(primary_key=True, null=False)
PublishUserId=models.ForeignKey(UserInformation,on_delete=models.CASCADE)
LocationId = models.ForeignKey(Location, on_delete=models.CASCADE)
DiscussionCode = models.TextField(max_length=140)
创建DiscussionImage 表
class DiscussionImage(models.Model):
DiscussionImageId = models.AutoField(primary_key=True, null=False)
ImageUrl = models.URLField()
DiscussionId = models.ForeignKey(Discussion, on_delete=models.CASCADE)
filename = models.CharField(max_length=252, default="")
file_md5 = models.CharField(max_length=128)
file_type = models.CharField(max_length=32)
file_size = models.integerField()
created_at = models.DateTimeField(default=datetime.now)
updated_at = models.DateTimeField(default=datetime.now)
创建Comment 表
class Comment(models.Model):
CommentId = models.AutoField(primary_key=True, null=False)
DiscussionId = models.ForeignKey(Discussion, on_delete=models.CASCADE)
CommentCode = models.TextField(max_length=140)
CommenterUserId = models.AutoField()
CommenterUserOrId = models.AutoField()
创建RollingImage 表
class RollingImage(models.Model):
RollingImageId = models.AutoField(primary_key=True, null=False)
LocationId = models.ForeignKey(Location, on_delete=models.CASCADE)
RollingImageUrl = models.URLField()
G.4 运用设计
G.4.1 数据字典设计
对数据库设计中涉及到的各种项目,如数据项、记录、系、文卷、模式、子模式等一般要建立起数据字典,以说明它们的标识符,同义名及有关信息,在本节中要说明对此数据字典设计的基本考虑。
G.4.2 安全保密设计
通过区分不同的访问者、不同的访问类型和不同的数据对象,进行分别对待而获得的数据库安全保密设计考虑。
访问者 |
权限提供 |
访问类型 |
游客(未学生认证成功) |
受限的查询搜索 |
POST |
学生 |
发布评论,发布讨论,发布功能介绍,查询搜索 |
POST |
数据库由专门数据库管理用员对数据库操作,需要注意以下几项安全问题:
访问安全 、网络安全 、传输安全 、备份安全 、数据安全
设置以下安全规则:
- 每天进行数据备份是保障系统安全的重要手段,保证备份安全
- 系统设置用户的标识以鉴定是否是合法用户,并要求利用电子科大信息门户系统进行学生认证,并将合法用户设置成学生身份,保证用户身份不被盗用,保证数据安全。
- 系统对不同的数据设置不同的访问级别,限制访问用户可查询的处理数据类别和内容,保证网络安全。
- 系统对不同用户设置不同的权限,区分不同的用户,如区分学生和游客,保证访问安全。
- 传输皆采用md5 算法传输数据,不采用明文传输,保证传输安全
相关阅读
asp连接access数据库代码(包含.mdb和.accdb两种格式)
现在的access数据库有2种后缀格式:.mdb和.accdb,区别是.mdb是access2003版及以前,.accdb是2007版access的格式。因为版本不一样,所以
MyBase的目标是为软件开发学习者提供一个编程实践平台。您可以在https://github.com/zhangqhn/mybase 下载mybase源码。 MyBase
1.从童年对纸飞机的喜爱引入还记得童年的纸飞机吗?TA记载着我们童年的喜怒哀乐还有我们对天空无限的憧憬和向往2.1903年莱特兄弟第
忙活了大半年,最近刚好有一个改版项目完成上线,又正值中期总结这个档口,所以针对项目总结将一些经验技巧梳理出来。项目总结相信大家
1.什么是sequence?其作用是什么? 在Oracle数据库中,什么是序列呢?其中的作用是什么呢?其实sequence是序列号生成器,可以为表中的行自