中国开发网: 论坛: 程序员情感CBD: 贴子 58320
有狐
不知道还有人在吗?请教一个数据库表结构的问题
请教一个数据库表结构的问题

最近在做工作流,B/S、SQL Server2000
每个流程都可以自定义很多数据项,每个数据项可以是不同数据类型
比如整型、浮点型、文本型,日期时间型,uniqueidentifier型
这些数据有些可能作为流程执行中各种条件表达式的一部分
这些条件表达式包括路由条件和每一步的执行者等等
在把流程实例化开始执行时,流程中的每一步对应的任务都需要保存对应的流程数据

每一个流程有自定义数据类型和数据定义表:
TProcessDataType
----------------------------------------
ProceessId TypeId TypeName TypeDesc TypeBase TypeSize TypeMin TypeMax ……

TProcessData
-----------------------------------------
ProcessId DataId DataName DataType DataValue(初始值)

我想请教的就是任务数据表的结构(比如称为TTaskData表)
我设计过两种方式:
1. 用记录代替字段
TTaskData
----------------------------------------------------
TaskId  DataId  DataValue  DataValue2

上面的DataValue是sql_variant类型的,DataValue2是text类型的
为什么有DataValue2是因为sql_variant不支持text/ntext/image
而流程数据中肯定是会有超大文本数据的
2. 用多字段
TTaskData
------------------------------------------------------
TaskId Data1 Data2 。。。Data20 Data21 Data22 。。。 Data30

上面的Data1 --> Data20 是sql_variant类型
Data21 --> Data30是text类型


第一种方法的好处是流程的数据项数量不受限制,因为只是记录数增加
缺点是由于流程肯定会被无数次执行,到时候记录数会很多很多,这是个问题
还有就是在流程数据作为条件表达式的一部分进行判断时比较麻烦
我采用的做法是条件表达式判断时动态生成类似第二种方法的临时表来JOIN

第二种方法的好处是条件表达式的判断比较方便快捷,任务数据表记录会少很多,
而缺点就是流程数据项的数量受限制,虽然表字段可以再增加,可表字段多了
也影响效率

现在这两种方法我都顺利实现过,都是可行的,现在采用的是第二种,考虑的是
流程数据项目前来看不会太多,可也许将来有了复杂的流程就需要N多数据项

想请各位高人指点指点,看有没有可以改进的地方,或者有没有其他更好的解决办法?谢谢

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录