关于java:MySQL一一数据库设计和建模工具PowerDesigner

41次阅读

共计 4641 个字符,预计需要花费 12 分钟才能阅读完成。

1. 概述

关注我不迷路,每天分享一点点,每天提高一点点~

1.1 数据的组织模式

已经的软件工程书中将软件等价于代码加上数据。由此可见代码和数据是形成软件的因素。我想用“静若处子,动若脱兔”来形容数据和代码会比拟形象:数据是记录对象某时刻点的动态快照,例如一张表单;而实现业务的代码便是看不见的一只手,操作并扭转着数据。

数据按存储模式可分为:文件型,如 XML、JSON、Cookie 等;数据库型,如 SQL Server、Oracle、Sqlite 等;内存型,如 Session 会话。

按组织模式可分为:层次模型,采纳树形构造示意数据与数据间的分割,一个节点代表一条记录,根节点以外的其余节点有且仅有一个双亲节点;网状模型,采纳网状结构示意数据与数据间的分割,容许一个以上的节点无双亲,一个节点能够有多个双亲;关系模型,用表构造表白实体集以及实体集之间的分割。关系模型与前两者最大的差异是用主码代替指针导航数据。

不难看出无论数据如何组织,不同的数据模型都关注两点:数据以及数据间的分割。

1.2 剖析案例

为无效爱护耕地,成都市国土资源局决定建设成都市耕地爱护根底数据库,建设农户、耕地档案以增强耕地与补贴基金发放治理。

需治理数据有农业家庭户、家庭户成员、耕地三类信息。农业家庭户信息蕴含户号、户类型、户主姓名、户主身份证号、户所属行政区划(即权属代码)。家庭户成员信息包含姓名、身份证号、性别、出生日期、年龄、是否为土地义务人。耕地信息包含地块编号(权属代码加 4 位自编码组成)、耕地类型、图幅编号、图斑编号、合同面积、实测面积、直补面积、注销年份。

每户家庭蕴含一位或多位家庭成员,某位家庭成员仅属于一户家庭。每户家庭领有一块或多块耕地,某块耕地属于一户或多户家庭。

2 数据库设计

2.1 设计内容

数据库设计属于零碎总体设计和具体设计中的一项。

联合需要调研中用户提出的数据需要加以分析,在总体设计阶段的外围是造成概念模型,次要包含:现有数据梳理与剖析、数据库逻辑构造、命名规定、E- R 图。在具体设计阶段是对总体设计的具体细化,次要包含:数据库物理构造与存储计划、表形容和表的属性清单等。

2.2 步骤

在 PowerDesigner 中提供了多条设计路线、模型的互相转换(如图 2‑1 所示)供设计人员自由发挥。常见的流程大略有如下两种:

图 2‑1 CDM、PDM、OOM 的关系

l  设计 CDM,再转换为 PDM,最终生成 OOM。

l  设计 CDM,转换为 PDM、OOM,再别离细化。

本文采纳第一种流程进行数据库设计实际。

3 概念数据模型设计

3.1 找到实体

首先将用户需要中形容的业务畛域内的名词找进去,如果零碎中须要存储它们的信息或状态,可能就是咱们要找的业务实体对象。

依据 1.2 节形容,大抵能确定零碎至多有农业家庭户、家庭户成员、耕地三个实体。

表 3‑1 零碎蕴含的实体

实体名 含意
农业家庭户(Family) 寄存农业家庭户信息 用于以户为单位查问户成员和耕地
家庭户成员(Members) 寄存家庭户成员信息
耕地(Land) 寄存耕地地块信息

3.2 理清分割

找到实体后,依据需要形容和业务了解,将实体之间的分割用菱形示意,菱形框内写明分割名,并用无向边将无关实体连接起来,同时在无向边旁标上分割的类型“一对一(1,1)、一对多(1,n)、多对多(m,n)”。

图 3‑1 实体间分割

3.3 造成 E - R 图

绘出了实体和分割就搭好了 E - R 图的骨架,上面将零碎中关注实体的属性追加到各实体上。因为 E - R 图是概念设计阶段的产物,所以咱们无需过多关注数据库和编程实现的细节因素,免得失落了重点。

例如属性中是否须要实体序号(即 Id),复合属性(如地块编号)的拆分,派生属性的解决(如出生日期和性别可由身份证号得出,年龄可由出生日期得出),听从范式等等都能够放在具体设计阶段。

概念设计阶段要做的就是找到零碎次要外围实体及其互相分割,并原原本本的将实体在零碎中须要用到的属性标示进去。

图 3‑2 耕地爱护零碎 E - R 图

3.4E- R 图转换为 CDM

概念设计阶段,E- R 图更多的作为一张重要的“草图”。概念设计中须要 E - R 图,但常采纳概念数据模型来代替。我想可能是因为后者齐全继承了 E - R 图所有的因素和精华,而且能更简洁的形容属性、在具体设计和数据库生成中沿用上阶段成绩。

综上所述,概念设计时可采纳 E - R 图的思维形式间接绘制概念数据模型。E- R 图和 CDM 无关概念对应关系如下:

表 3‑2 E- R 图和 CDM 无关概念对应关系

E-R 概念数据模型(CDM
实体 实体(Entity)
分割 分割(Relationship)
属性 属性(Attributes)
关联(Association)
特殊化 继承(Inheriance)
依赖(Link/Extended Dependency)

设计 CDM 时,须要留神它与 E - R 图在细节上的一些不同。其一,属性都有数据类型、长度、是否非空(Mandatory)设置;其二,实体最好都有主键(Primary Indentifier),否则转换为 PDM 时无奈主动创立参照关系(外键);其三,“一对多”分割中可能存在的依赖分割(标定分割)。

为属性设置了数据类型,将能惟一标示实体的属性设为主键,最终造成 CDM 如下。户号、地块编号别离作为农业家庭户、耕地实体的主键。虽身份证号码可惟一辨识家庭成员,但思考可能存在录入谬误需更改,便独自创立了自增编号作为主键。

图 3‑3 耕地爱护零碎 CDM

4 物理数据模型转换

4.1CDM 生成 PDM

入选定了数据库时,可将已有 CDM 转换为与数据库对应的 PDM,继而还可由 PDM 生成 SQL 脚本来建设数据库存储构造。

在具体设计阶段,需联合零碎性能实现形式来思考数据存储,数据库设计的重心转向数据模型的物理实现。如辅助撑持表的建设、派生属性的解决、索引的建设等等。

关上 CDM 模型,抉择 ToolsàGenerate Physical Data Model 命令,抉择指标 DBMS 点击确定即可生成 PDM。转换中其对应关系如下:

表 4‑1 CDM 与 PDM 中对象对应关系

CDM 中对象 PDM 中对象
实体(Entity) 表(Table)
分割(Relationship) 参照关系、外键(Reference)
属性(Attributes) 列(Column)
主标示符(Primary Identifier) 主键(Primary Key)

生成 PDM 如下图,因为农业家庭户与耕地是“多对多”关系,所以零碎主动生成一张新表来记录该关系。而农业家庭户与家庭成员是“一对多”关系,零碎主动在家庭成员表中追加户号外键。

图 4‑1 耕地爱护零碎 PDM(1)

4.2 具体问题具体分析

1) 冗余字段的取舍

农业家庭户表的字段设置尽管合乎零碎出现数据的须要,但如果户主产生变更,咱们须要变更家庭成员表中新户主为土地义务人,同时批改农业家庭户表的户主信息。如果农业家庭户表中去掉户主姓名、身份证号字段,则按户查问时需通过户号关联家庭成员表,且是土地义务人的记录中提取户主姓名、身份证号。

思考零碎查问操作为主,编辑户主信息操作频率很低,农业家庭户表保留了户主姓名、身份证号字段。

2) 派生属性(传递依赖)的解决

在家庭成员表中,性别、出生日期字段依赖身份证号码字段,年龄字段局部依赖于出生日期字段。是否去掉性别、出生日期、年龄字段,在零碎代码实现中提供算法实时提取性别、出生日期和年龄?

稍作剖析可知:性别和出生日期是不随工夫扭转的,在录入时就从身份证号码中提取进去,既是身份证号码格局查看的必然须要,也进步了零碎读取记录时的效率。年龄是今时与出生日期间的差值,随工夫而不同,显示时实时计算最正当,所以删除年龄字段。

3) 复合属性的解决

在耕地表中,主键地块编号由权属编码和 4 位自编码组成。权属编码即行政区划代码,由区县、乡镇、村居委会、组形成 18 位代码。各组内从 0001 开始编 4 位程序码,两者组合保障了地块号惟一。

零碎中需实现按权属编码的分类汇总,如按组、按村居委会等等。通过地块编号字段的字符串前缀匹配运行即可实现(如 LIKE‘510108%’),即不再独自增加权属编码字段。

4) 辅助撑持表的建设

从前文中能够看出耕地、农业家庭户均按权属编码分层治理,但现数据库设计中却未思考权属编码的寄存。在零碎中它常以树状构造出现、递归形式读取记录,所以在权属代码表中需设立父节点序号等字段。

除此之外,户类型、耕地类型、性别字段值为了物理存储不便,均采纳一位数字示意。但在零碎中出现时须要翻译成对应的中文含意,如男女、家庭户、集体户等。因为性别、户类型枚举项固定不变,能够思考硬编码到代码中作为枚举类型(Enum Type);耕地类型枚举项可能存在变动,能够数据库中建表或在 XML 文件中治理。

5) 其余

如果某家庭户所领有地块缩小,则需在户与耕地关系表中删除对应记录。为了保障操作可逆,零碎经常设立 Status 字段作为逻辑删除标示。

图 4‑2 耕地爱护零碎 PDM(2)

4.3 生成 SQL 建库脚本

关上 PDM 模型,抉择 DatabaseàGenerate Database 命令,可生成 SQL 脚本或间接连贯 DBMS 建库。

5 面向对象模型生成

面向对象模型(OOM)是与编程语言密切相关的 UML 形容模型。它可由 CDM、PDM 生成类图,再由 OOM 生成目标语言代码。

该局部内容不在数据库设计探讨领域,在此不再赘述。

6 小结

6.1CDM、PDM、类图无关概念对应关系

表 6‑1 CDM、PDM、类图无关概念对应关系

CDM 中对象 PDM 中对象 类图中对象
实体(Entity) 表(Table)
分割(Relationship) 外键(Reference) 类类型字段(变量)
属性(Attributes) 列(Column) 字段(变量)
主标示符(Primary Identifier) 主键(Primary Key) 字段(变量)
关联(Association) 外键、关联表 类类型字段(变量)
继承(Inheriance) 继承

办法、接口、多态形容了对象的行为,是零碎运行的规定;属性形容了对象某时点的状态,是动态的快照。因为内存无限、零碎也不可能永不进行,所以将对象的状态值放在数据库中存储,零碎运行须要时再映射还原成对象。

6.2 生成数据库设计文档

PowerDesigner 提供了依据 CDM、PDM 等模型生成数据库设计文档的性能,缩小了文档编写的工作量,生成文档内容次要包含模型图、所有列表项等等。抉择 ReportàGenerate Report 命令,可通过向导或已有模板生成文档。

6.3 听从范式

数据库设计是否须要严格听从范式,须要达到第几范式?这个问题始终困扰着我。最终我失去的答案是适合就好,集体认为第三范式能够作为数据库设计的个别参照规范。

7 参考文献

看了这么多,劳动一会吧。我这里整顿了 sql 的几版 zl,come on!!!

[1]     陈平、褚华,软件设计师教程,第 2 版,清华大学出版社

[2]     赵韶平、徐茂生等,PowerDesigner 系统分析与建模,第 2 版,清华大学出版社

[3] 图中年龄属性用虚线边框,只为突出它是非必须的属性。后文详论。

[4] 非凡的实体,标示零碎某事件引起的实体间分割。如家访对于老师和学生、租借对于顾客、商店和影片。

[5] 对象变量,如 object、用户自定义 class。两个类的分割在 Hibernate 中由对应的 hbm.xml 定义。

[6] 蕴含值类型(int、float、char、enum、struct 等)、援用类型(string)。

正文完
 0