开始 |
以图1.来描述DEMO的需求:
图1.
在图1.设计一个DEMO系统能实现从【源数据】至【目标数据】的数据转换,转换过程能让用户通过调用自定义函数来实现。
基本流程图 |
图2.
图2.中的"多次调用"并表示多次调用同一个函数,而是可能存在先后调用不同的函数进行数据转换。
函数f(x)常见的几种情况 |
图3.
图3.中的列Function,描述各个函数名,列Input描述每函数的输入变量(参数),列Output描述函数的输出变量。其中Output部分,存在两种情况,一种是单一值,另一种是表(记录集)。在列Content描述函数的具体内容,这里使用省略号来描述其内容,如果含有调用其他函数的,就写调用对应的函数名。
Chen's 数据库表示法 |
图4.
图4. 中的function是object中的其中一种类型对象,在object的属性object type描述对象类型,值范围是{table,view,function} 。object的属性is custom描述是否是用户自定义的对象(这里is custom=1的时候,object一定是用户自定义函数). function的属性function type 有两个值{scalar, table-valued }.function type与output存在约束关系,当function type = scalar的时候,output属性一定是一个标值,反之就是表值。
物理模型图 |
图5.
数据模拟 |
图6.
这里模拟两种SQL Server实例环境,一个是本地的"MSTEST-PC\SQL2012DE"和远程的"192.168.163.2\SQLCOM,9101"。因为篇幅问题,这里我只拿两个数据库的一些表、视图、函数来模拟。而且模拟的数据可能与之前的数据库物理模型图有些不一样,我这里只列出一些关键信息的内容(字段),而且有几个表联合一起显示,这犹如UI上面呈现给用户的列表;这样做的目的是,为了更能让数据更直观感,更重要的是方便与其他组织部门沟通。
图7.
图8.
图8.只有当function type是table-valued function的时候,才有function_return这一部分。当function type 是 scalar function的时候,函数就只返回一个某一类型的值,可以跳跃查看图10.部分的function_output.
图9.
图10.
图11.
图12.
图12. 描述function_content引用到的对象,及哪些对象字段。
扩展 |
简短描述几个:
-
虽然前面描述了用户自定义函数如何设计,涉及到源对象(哪些table,view,function),但少了目标对象(转换后的结果存在在哪里)。
-
源对象发生改变,那么如何通知用户是否修改自定义函数。
-
用户自定义函数如何进行版本管理。
-
如何优化自定义函数。
小结 |
以上的内容只是一个DEMO的需求和有关数据库设计的内容,可能描述的不够详细具体。在前面的内容,大部分我都是用图形描述,而使用文字描述的地方很少。我觉得通过图形,有时候比文字更直接,更有效。