语言不可知 – 从关系数据库中“扩散”对象

前端之家收集整理的这篇文章主要介绍了语言不可知 – 从关系数据库中“扩散”对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们的win32应用程序从 MySQL关系数据库中的许多表格中的数据中汇编对象.在这样的对象中,多个修订版本存储在数据库中.

当存储多个版本的东西时,迟早会问你自己的问题,如果你可以可视化两个版本之间的差异:)所以我的问题是:什么是“diff”两个这样的数据库对象的好方法

>你会在数据库级做比较吗? (听起来不是一个好主意:太低级别,对架构太敏感).
>你会比较对象吗?

>你会写一个“手动”比较两个对象的属性和字段的函数吗?
>你如何存储差异?在一个单独的,通用的“TDiff”对象中?
>关于如何在用户界面中可视化这些内容的任何一般建议?

关于你自己的经验的建议或故事非常受欢迎;谢谢一堆!

用例额外信息(20090515)

回答安东尼的评论:这个具体的应用程序是用来安排由老师团队管理的培训课程.教师的日程表存储在数据库中的各种表格中,并且包含诸如“她必须在哪一天去哪里”,“谁是团队中的同事”等信息.这些信息分散在多个表.

有一段时间,我们“发布”时间表,所以老师可以在网页上看到它.每个“出版物”都是一个修订版,我们希望能够向用户(以及老师们)展示两个出版物之间的变化 – 如果有的话.

希望能让场景更有形更多:)

一些最后的话

那么赏金已经结束了,所以我接受了一个答案.如果以某种方式有可能从我的代表中挑选一些额外的100分,并给予其他一些答案,我会毫不犹豫地这样做.你们所有的帮助都很棒,我非常感谢! 〜Onno 20090519

解决方法

假设一个类有5个已知属性 – 日期,时间,主题,大纲,位置.当我查看我的日程表时,我对这些属性的最新(即当前/准确)版本感兴趣.如果有什么事情发生了变化,对我来说也是有用的. (作为附注,如果日期,时间或地点发生变化,我也希望得到一封电子邮件/短信通知我,以防我不检查更新的时间表:-))

我建议在修改时间表时执行’diff’.因此,当创建该类的版本2时,记录哪些值已更改,并将其存储在版本2对象的两个“更改日志”字段中(必须已有一个位于所有表的顶部的父表格 – 使用该表格) ).一个变更日志字段是“人类可读文本”,例如“从5月1日星期一到5月2日星期五,时间从上午10点改为10:30”.第二个changelog字段是已更改字段的分隔列表,例如’date,time’要执行此操作,在保存之前,将循环使用用户提交的值,与当前数据库值进行比较,并连接2个字符串,一个可读取,一个字段名称列表.然后,更新数据并将连接的字符串设置为’changelog’值.

默认显示当前版本的日程表加载.循环遍历changelog字段列表中的字段,并注释显示显示值已更改(a *或高亮等).然后,在单独的面板中显示人类可读的更改日志.

如果一个日程安排不止一次修改,您可能希望将版本1和2和2& 3.在版本3中,只有课程大纲发生变化 – 如果这是您显示时间表时唯一的更改日志,则不会显示更改日期和时间.

请注意,这种非正规化方法对于分析来说将不是很好 – 例如,制定哪些特定位置始终将类从其中更改 – 但是您可以使用E-A-V模型扩展它以存储更改日志.

猜你在找的MsSQL相关文章