IDEF 构图方法

IDEF (ICAM DEFinition method) 代表的是一整套的概念建模方法,总共有 IDEF0 ~ IDEF14 + IDEF1X 共 16 种,不过篇文章不太可能介绍完,只会对一些重点做介绍,首先列一下 IDEF 16 种到底有哪些? [1]

  • IDEF0 功能建模(Function Modeling): 用来表示特定领域知识(特别是工程),以结构化的流程图来表示。
  • IDEF1 信息建模(Information Modeling): 用来表示主题领域内的资料结构及描述。
  • IDEF1X 数据建模(Data Modeling): 用来描述系统资料储存与资料的关系
  • IDEF2 仿真建模设计 (Simulation Model Design): 用来产生动态模型,动态模型表示随时间变化的行为
  • IDEF3 过程描述获取(Process Description Capture):
  • IDEF4 物件导向的设计(OO设计)(Object-Oriented Design)
  • IDEF5 本体描述获取(Ontology Description Capture)
  • IDEF6 设计理论获取(Design Rationale Capture)
  • IDEF7 信息系统审核(Information System Auditing)
  • IDEF8 人-系统交互界面设计(User Interface Modeling)
  • IDEF9 场景驱动信息系统设计(Scenario-Driven IS Design)
  • IDEF10 实施体系结构建模(Implementation Architecture Modeling)
  • IDEF11 信息制品建模(Information Artifact Modeling)
  • IDEF12 组织建模(Organization Modeling)
  • IDEF13 三模式映射设计(Three Schema Mapping Design)
  • IDEF14 网络设计方法(Network Design)

本篇文章就挑 IDEF1X 来介绍好了,IDEF1X 的元素种类可以透过 ER 图来比较 [5]:

https://ithelp.ithome.com.tw/upload/images/20210924/20092753DVrMPsHLbi.png.

用来表达 Entity-Relation 的方式都一样,详情可以回头看看 ER Diagram,并请简略参考下图:

https://ithelp.ithome.com.tw/upload/images/20210924/20092753D0hUoiRwAG.png

这是 Wiki 中的 IDEF1X 的范例图,在上面同样可以看到每个关联性都有写上关系文字,跟上一节的 ER 图介绍的作法是差不多的。

由於图、画法都与 ER 图相近,所以现在要介绍一些不同於 ER 图章节的内容,就是【建模方法】,具体来说就是对一整套系统(或称业务需求)来做建模,这个建模需要经过 5 个阶段 (A~E):

(-1A). 所有项目的初始化 (第零阶段)

每个项目在第零阶段中,你会需要运用以下工具来稍微撰写目前得到的所有资料、文件、把文件整理成 Workspace,建立绘制模型的约定,以下是目标。

  1. 专案目标: 说明清楚必须要做什麽、为什麽要做这些以及如何做。
  2. 资料蒐集: 开会、汇整、瞎子摸象、买书、了解素材、了解客户需求、读书会,并且把这些资料做整理归纳
  3. 绘图协作约定: 确保大家了解而且对绘制 IDEF1X 有共识。

(A). 实体定义 (第一阶段)

第一阶段有两大目标产出:

  1. 实体池
  2. 实体术语表 (glossary)

第一阶段要完成的话,需要把所有手边的资料全数整理完 (这包含问题领域、Domain Knowledge) ,建立出所有实体和他们的定义 (定义要有上下文关联) 以及赋予一些名称,全部定义出来在一个图表中,你就会得到第一阶段需要的【实体表】。

下图是一个转换所有角色、物件,归纳出实体的例子,比方说这套 ERP / 员工系统,将 【人】 这个角色分离出【员工】这个实体,并写上属性。

https://ithelp.ithome.com.tw/upload/images/20210924/200927535Bilz93MvI.jpg

然後,也许建立一份文件,把每个定义的名称做一些解释说明,方便日後 Ctrl+F 搜寻,这样就完成【实体术语表】。

(B). 关联性定义 (第二阶段)

第二阶段有三大目标产出:

  1. 关联性矩阵
  2. 关联性定义
  3. 实体关联图

1. 画出实体关联性矩阵

https://ithelp.ithome.com.tw/upload/images/20210924/20092753wXKNIqbwwg.jpg

比方说上图是 Buyer (购买者), Requester(请购者), Approver(审核者), Purchase Requsition(申请采购), Purchase Req. Item(采购物品),这一连串的东西很显然都是不同的概念 (指他们都不是继承、父子关系),用这个关系矩阵,就是直接把行列都变一样成这 5 个,然後对照这个表填上他们之间是否有关,有关就划记,还记得 SQL Cross Table 吗? 就是这麽回事,画表可以帮助你完整检查所有必要的关联性,而不会只有你想到的某几个。

2. 画出实体的线框图,而且定义他们之间的关联 (大功能、大系统,没有继承、父子关系的资料,建立关联性描述)

https://ithelp.ithome.com.tw/upload/images/20210924/20092753UOx2iOgvjD.jpg

3. 划出聚焦图,聚焦图就是将功能聚焦到同一个实体的图 (划出他们之间的关联,与聚焦图无关)

https://ithelp.ithome.com.tw/upload/images/20210924/20092753rYAE33vCv2.jpg

(C). Key 定义 (键、主键、外键) (第三阶段)

第三阶段的目标是:
1. 把第二阶段的关联性更详细的描述,把粗略的关联详细化 (可能会造出新的实体 Entity)
2. 定义每个实体的【关键属性值】 (注意这个步骤只是请你把这个 Entity 最关键的属性填上,其他的还没有)
3. 定义 Primary Key 和对应的 Foreign Keys
4. 验证关联性和这些 Keys

对 2 点需要详细解释,这个 2 指的是关键属性,可以使用矩阵的方法列出所有【可能会是 KEY 的候选人】,比方说 Customer Id, Account Id, 或是 Payment Id, IDNo, Pass-code, Discount Code,不过这次是 Entity 对所有列出的关键属性做划记:

https://ithelp.ithome.com.tw/upload/images/20210924/20092753dHFiQCTuNz.jpg

属性、Entity 可能有非常庞大的数量,想要减少一些不相关的资料出现在这张表上,要特别小心有没有疏漏。

(D). 属性定义 (第四阶段)

第四阶段的目标是:

  1. 定义完所有 Entity 的属性 (属性池)
  2. 把所有实体都填上属性 (注意应该是到这个步骤才开始规划资料库 Column 有哪些栏位)
  3. 定义这些属性的名字、定义和同义词、同名词 (可能是混淆的情况)
  4. 针对上述的属性做精确化,尽可能实施重复规则,但设计资料库一般会注意重复规则过度实施会造成 Query 困扰,可以参考反正规化 (比方说系统都吃订单的 id,而客户查询资料都会用字串 Number,为了减少 join 次数,可斟酌把 Number 重复进订单的资料表以优化效能)。

以上补充,池可以当作是一种字卡,定义完池之後,再把字卡拿出来排列组合。

References:
[1] https://zh.wikipedia.org/wiki/IDEF
[2] https://en.wikipedia.org/wiki/IDEF0
[3] https://support.microsoft.com/zh-hk/office/%E5%BB%BA%E7%AB%8B-idef0-%E5%9C%96-ea7a9289-96e0-4df8-bb26-a62ea86417fc
[4] https://zh.wikipedia.org/wiki/IDEF1X
[5] https://www.cnblogs.com/jplee/archive/2006/10/12/527775.html
[6] https://zh.wikipedia.org/wiki/IDEF1X
[7] https://www.edrawsoft.com/cn/idef0-solutions.php
[8] https://read01.com/0KeBym.html
[9] http://www2.nkfust.edu.tw/~percy%20/Report4/IDEF0_QFD_CIM_Selection.pdf
[10] http://businessprocessagility.com/wp-content/uploads/2015/06/IDEF03-guidebook.pdf
[11] https://edisciplinas.usp.br/pluginfile.php/5043740/mod_resource/content/1/JME2009_p131_140.pdf
[12] https://books.google.com.tw/books?id=TZPHDwAAQBAJ&pg=PA155&lpg=PA155&dq=idef+wiki&source=bl&ots=EL59BiBeVd&sig=ACfU3U0WrAfXu1GIFFHX3K1XDcoUgz60-Q&hl=ja&sa=X&ved=2ahUKEwibxP7Q1djyAhWLN5QKHfZUAqUQ6AF6BAgZEAM#v=onepage&q=idef%20wiki&f=false


<<:  Day 10 实用的 let 方法以及客制化错误讯息!

>>:  【Day24】 Transformer 实作包(一)

Day16 - [丰收款] 取得PayToken的最後一哩路很慢长

昨天抱病撰文,终於在本机端将单笔资料透过ORM的方法,成功将新增的订单资料更新到Heroku Pos...

Day30 - this&Object Prototypes Ch3 Objects - Review

Iteration forEach()、every()、some() 三者的差异在於:他们会对我们...

Day 4 - hello world!!

开始罗!准备好hello world了吗? 昨天我们讲完配置环境了,今天就开始写code吧! 开始吧...

[NestJS 带你飞!] DAY24 - Authentication (下)

上一篇已经处理好注册与登入的部分,但一个完整的帐户机制还需要包含 登入後 的身份识别,为什麽登入後还...