uml - 重塑数据框的正式 UML 表示
问题描述
为了记录数据表的重组,从“宽”使用每个分数的标准列到使用score
列和criterion
列,我的第一反应是使用 UML 类图。
我知道通过改变数据表的结构,类属性并没有改变。
我的第一个问题是宽版本还是长版本是数据表的更正确表示?
我的第二个问题是,将这两种表示联系起来是否有意义——如果是这样,通过哪种关系?
我的第三个问题是,除了 UML 类图之外,是否更适合记录重塑(在将分布显示为 R 中的盒子之前的数据预处理)。
解决方案
你从表跳到 UML 有点快。这使您的问题非常混乱,因为表的宽度表示为一个类,反之亦然。
重新制定您的问题,看来您正在重构一些表。宽表在同一行中显示同一学生的多个值。这意味着最大练习数由表结构固定:
ID Ex1 Ex2 Ex3 .... Ex N
-----------------------------
111 A A A ... A
119 A C - ... D
127 B F B ... F
长表的列较少,每行仅显示 1 个特定学生的 1 个特定分数:
ID # Score
---------------
111 1 A
111 2 A
111 3 A
...
111 N A
119 1 A
119 2 C
...
您可以在 UML 类图中对该结构建模。但是在 UML 中,表格布局无关紧要:这是 ORM 映射的问题,您可以完美地拥有一个1..N
可以使用宽版本或长版本实现的类模型(具有属性或具有多重性的关联) . 如果多重性1..*
只是长选项会起作用。
现在回答你的问题:
- 两种表述都是正确的;他们只是有不同的特点。宽是不灵活的,因为最大分数数由表结构固定。此外,添加新分数实际上需要更新记录(因此两种模型可能的并发性并不相同)。如果您想连续显示学生分数的历史记录,使用 long 会稍微复杂一些。
- 是的,将两者联系起来是有意义的,特别是如果您正在编写将第一个转换为第二个的转换。
- UML 在这里不一定会增加价值。如果你真的很关心表和值,你也可以使用实体/关系图。但是 UML 还具有允许数据库建模的优点,它允许您添加行为方面。如果不是现在,那么以后。您可以考虑使用 non-standard
«table»
stereotype来阐明您正在为表格建模的内容(因此是您设计的低级视图)。
推荐阅读
- workbox - 使用工作箱中的 StaleWhileRevalidate 和 BroadcastUpdatePlugin,如何通知客户端没有变化?
- haskell - Haskell 使用 UArray 实现数据类型的 Show
- spring - 弹簧缓存。如果没有键和参数,缓存键是什么
- post - 首先是什么:视图或序列化程序?
- plsql - Oracle - 使用加入 3 个表进行更新
- php - Ajax Post 重定向到与发布数据 PHP 相同的 url
- pine-script - 将 Pine 脚本转换为 MQL4 语言(简易指示器)
- flutter - Flutter intl 版本冲突
- java - Selenium:cssSelector 和路径都找不到元素
- haskell - Lambda演算评估:首先减少表达式然后替换?