软件2105-初唐五杰-数据库设计心得
指导老师:肖雄仁
项目:管道直饮水自动控制云平台
团队名:初唐五杰
成员:杨虎强、马子豪、刘一凡、谢昶皓、陈家睦
在本次数据库的设计中,我们小组所采取的设计步骤如下:
需求分析
小组项目为设计一个直饮水机管理云平台。重要的系统需求如下:
- 1.系统分为用户APP端、维修工APP端、管理员Web端三个部分
- 2.系统需要管理的设备分为水表、供水机、制水机
- 3.Web需要分片区管理设备,同时也应该划分维修工的维修区域
- 4.Web需要实时显示设备信息,如水表读数、供水机水位、制水机的TDS和滤芯信息
- 5.系统可以收到设备的告警信息并实现自动派发工单
- 6.维修工可以接取工单、完成工单并查看自己的工资
- 7.用户可以报修、查看水质并缴纳饮水用费,该费用根据水表读数计算
- 8.用户和维修工可以收到来自管理员的信息
概念模型设计
根据以上需求,可以从中抽取出所需的实体和关系:
- 首先,系统有三种主要参与人员,可以选择分别建表或者将所有人员信息存入一张表中,小组经过讨论选择分别建表,主要原因在于维修人员具有一个所属片区的特殊属性。故建立用户、维修工、管理员三张表。
- 同样地,设备有三种,同样因为三种设备的属性有不同之处,因此也采用分别建表的方式,建立水表、制水机、供水机三张表。
- 对于第四点来说,由于设备信息的属性也不同,所以同样为每一个信息单独建表,产生了水表读书表、供水机水位表、制水机的TDS表以及制水机的滤芯信息表。
- 对于第五点来说,对于系统收到的告警信息,需要建表进行存储,因此建立告警表。
- 对于第六点来说,需要建立工单表,以存储产生的工单以供维修工进行接取和完成,同时还可以查看自己的工资,所以需要建立工资表。
- 对于第七点来说,需要建立一张账单表以存储用户的账单。
- 对于最后一点,需要建立一张通知表,来存储管理员给用户和维修工发出的通知,以便用户和维修工随时浏览。
- 实体间的关系通过外键或者关系表的形式体现,此处不做过多赘述。
使用PowerDesigner根据概念模型产生物理模型和sql语句
-
使用CDM产生PDM:
-
使用PDM产生SQL语句:
-
CDM整体图:
-
PDM整体图:
-
数据库截图:
对于数据库的编写总结:
- 此次数据库编写收获颇多。首先是对于数据库外键的经验,数据库的外键所起的约束作用,可以在应用层实现所以当一个表的某个字段可能来自多个其他表时,可以不建立外键,通过在应用层进行约束;
- 其次是逻辑删除问题,对于逻辑删除来说,一般都是对重要的信息进行逻辑删除。我们小组开始设计表时,将所有的实体表都设置了逻辑删除,这实际上不仅影响性能,同时实际作用也不大,还会增加数据库设计的复杂度,经老师指点后不再使用逻辑删除;
- 以及表的设计问题,对于省市区这类有层级关系的表建立来说,不建议分开建立表,而是统一为一个表,在表中添加parent_id字段来体现层级关系。这样做的好处在于便于管理,同时由于省市区总体元组数量极少,对性能几乎不会有影响;
- 最后熟悉了PowerDesigner的使用,包括如何添加表、添加关系、如何设置外键并使用PowerDesigner进行一系列模型的生成。