数据库设计心得--百万项目组
前言
在软件工程导论课程中,我们通过分析业务需求来构建数据库实体对象,以及通过PowerDesigner完成了本项目的数据库概念模型、物理模型的设计。以下是我们团队的数据库设计过程以及一些心得体会。
团队介绍
项目名称:大件运输路线电子地图系统
指导老师:彭鹏
小组名称:百万项目组
小组成员:曹育铭(PM)、戴贝娴、郑家昂、徐豪鲜、曹黄森、孙小龙
数据库设计过程
在数据库设计之前,需求文档的撰写已经完善。
下边的数据库设计是在该需求文档的基础上进行设计。
概念模型设计
1、数据抽象
在数据抽象中,由于项目特点,我们在需求分析时。首先抽象出了司机、管理员、审核员三类用例,如下图:
2、设计局部核心E-R图
而在接下来的实体属性抽象中,除去用户的一般属性分析,我们将重点放在了与核心需求有关的路线属性抽象。
结合司机需求、审核员需求、管理员需求。
司机可以申请路线、填报路线。审核员审核路线。管理员需要及时更改路线状态、并且更改时需要指出路线具体问题处。
结合上述需求,我们将路线这一实体进一步抽象出了:路段实体、结点实体:
3、数据库总体设计:
综上考虑,我们小组根据开会以及和老师讨论,初步将数据库定为14个表。我们项目主要是用于大型交通运输,需要3种不同类型的用户:司机提交运输申请,审核员审核申请是否合规,管理员对相应的路线,人员进行一定的管理操作。因此我们开头定义了14个表,其中就有3个不同的用户:管理员,审核员,司机。后面经过胡军老师的验收,我们发现将用户分成三个表实在是冗余,因此我们将其三合一,放成一个用户表,然后又新添了一些表,以满足项目功能的实现。以下是我们所有表名:
序号 |
表名 |
功能说明 |
1 |
tbl_users |
用户表 |
2 |
tbl_roads |
推荐路线表 |
3 |
tbl_road_segs |
路段表 |
4 |
tbl_road_nodes |
收费站-交叉口结点表 |
5 |
tbl_road_stones |
独柱墩结点表 |
6 |
tbl_trucks |
车辆表 |
7 |
tbl_road_apply_logs |
路线申报表 |
8 |
tbl_audit_logs |
审核记录表 |
9 |
tbl_sys_informs |
系统通知表 |
10 |
tbl_sys_logs |
申报信息日志表 |
11 |
tbl_high_roads |
高速公路表 |
12 |
tbl_login_logs |
登录日志表 |
13 |
tbl_road_nodes |
高速公路-结点对应表 |
14 |
Tbl_blocked_segs |
阻断路段表 |
用户表:不同的用户登录具有不同的权限,用不同的用户来对系统进行操作。
推荐路线表:司机在填报路线的时候,需要系统智能的推荐一条合理的路线,减少人工输入的麻烦。
路段表:这个表用来存放一小节的路段,用于设置不同的路段状态,然后会影响到整个路线,同时整个路线的设置也与路段的选取相关。
收费站-交叉口结点表:高速公路中有意义的结点,这些结点会收取费用,限制车辆的属性,该结点表来存放这些结点。
独柱墩结点表:高速公路中存在一些一般的结点,这些结点对于车辆没有限制功能,但是能够对司机起到警示作用。
车辆表:每个司机拥有不同的车辆,车辆与司机个人相绑定,同时车辆也有一些固有的属性,保证车辆能否通行该路线,亦或是禁止通行。
路线申报表:司机每次申报的路线记录,包含了司机和路线的相关信息。
审核记录表:审核员审核司机申报的路线的记录信息。
系统通知表:系统对于用户的通知,存放在此表中。
申报信息日志:每次司机申报之后,存放在日志中,用于后面管理员查看,统计,选出新的推荐路线。
高速公路表:存放着一些高速公路,路线的申报,需要司机填写高速公路的名称。
登录日志表:每次用户登录都会留下登录信息。
高速公路-结点对应表:高速公路存在的交叉的结点信息。
阻断路段表:已经被阻断,无法通行的路段信息。
3、数据库设计全局E-R图
物理模型设计
物理设计是为逻辑数据结构模型选取一个最适合应用环境的物理结构,包括每个模型如何存储、每个字段如何存储、以及每个字段存储的类型大小等,在物理模型的设计中,需要更加细致,考虑每一个字段的使用。
我们采用的是建模工具是PowerDesigner。在本项目里,我们使用的数据库时是关系型数据库mysql。所以在建模工具PowerDesigner中选取的ODBC(数据库对象)为mysql。并且根据所设计的E-R图、逻辑模型,完成系统物理模型(PDM)的设计:
数据库定义
数据库搭建阶段,我们进行了一次数据库设计的规范化检查,统一了表名前缀("tbl_"),并且表中的字段,如果是多个单词组成,统一设计为下划线分隔。
并且因为本项目采用了PowerDesigner设计PDM,PowerDesigner可以通过PDM自动生成相应数据库表的创建sql语句,我们只需要在DBMS中执行即可,大大减少了数据库设计人员的工作量。下图是本项目中所有的数据库表:
具体表设计示例:
数据库设计出现问题
1. 刚开始的时候,为了凑数据库的表的数目,我们把用户拆成了三个表,显然,这是非常冗余的,后面经过一步步深挖,我们将这三个表合成一个,同时也满足了表的数量。
2. 选择高效合理的开发工具:数据库建模以及数据导入都应该使用合理的工具,我这里使用了DataGrip的图形化工具操作数据库比纯cmd操作既方便又直观。
数据库设计心得:
1.数据库设计要从需求出发,结合实际。数据库建立的目的是服务项目。数据库各个表的建立,表内属性的规划,都要便于实际开发。同时还要尽可能用到每一张表,不要出现无用的表。
2.数据库设计需要细心和耐心,多与老师交流,搞清楚项目的业务需求:例如,老师在群里回答了默认一条高速公路的车辆限制属性一样,这一下子就让我们多了高速公路这一表的需要。
3.数据的设置要在项目中可行可实现:刚开始的数据库我们打算是让用户填入结点,路段等等信息,但其实是不合理的,因为这些所谓的结点,路段是我们方便管理系统而定义的,司机是不可见的,因此我们需要高速公路,司机只知道走哪条路,具体是哪个节点,哪个路段需要我们在后端代码实现。
标签:司机,结点,--,数据库,路线,项目组,tbl,设计,心得 From: https://www.cnblogs.com/cyuming/p/16859040.html