逐步向导的数据库设计

时间:2011-10-18 08:10:48

标签: sql database database-design yii

我正在设计一个系统,其中包含与某些操作相关的逻辑步骤(但这些操作不是问题的一部分,但它们对于列表中的每个步骤都至关重要)!

我需要创建一种以有序方式定义所有逻辑步骤的方法,以便我可以通过查询获取列表,并在以后进行修改!

有这种数据库设计经验的人吗?

我一直在想有一个名为wizard_steps(或类似的东西)的列,然后使用优先级来制作订单,但由于某种原因我觉得这个设计在某些时候会失败(由于优先级相同的项目,然后添加新项目将重新排列其余项目,等等)!

我一直在考虑的另一个设计是使用“next item”作为wizard_step列中的一列,但我觉得这不是正确的步进式战斗机!

总结一下;我正在尝试制作一个列表(并且设计应该是开放的,以支持多个列表),这些元素的顺序至关重要!

关于数据库应该是什么样子的任何想法?

谢谢!

编辑:我发现这个yii组件我将查看:http://www.yiiframework.com/extension/simpleworkflow/

可能是一个很好的解决方案!

1 个答案:

答案 0 :(得分:1)

如果我帮到你,你的主要关注点是创建一个支持有序列表的模式可以轻松插入/重新排序项目。

下表设计:

id_list item_priority foreign_itemdef_id
1       1             245
1       2             32
1       3             45
2       1             156
2       2             248
2       3             127

与具有项目定义的表格相关联,将很容易查询,但难以维护,尤其是对于插入

那一个:

id_list first_item_id
1       45
2       38

耦合到链表:

item_id   next_item  foreign_itemdef_id
45        381        56
381       NULL       59 
38        39         89
39        42         78
42        NULL       45

查询更新都很困难(您应该更新事务中的链表,否则您的链表可能会损坏)。

为了简单起见,我更倾向于第一种解决方案。

根据您的更新频率,您可以考虑在item_priority之间使用较大的增量来帮助插入:

id_list item_priority foreign_itemdef_id
1       1000          245
1       2000          32
1       3000          45
2       1000          156
2       2000          248
2       3000          127
1       2500          46    -- late insertion
1       2750          47    -- late insertion

编辑:

这是一个有望为插入腾出空间的查询:它会增加参数上方所有行的优先级

$query_make_room_for_new_item = "UPDATE item_priority_table SET item_priority = item_priority + 1 WHERE item_priority > ". $new_item_position_priority ." AND id_list = ".$id_list;

然后插入优先级为$new_item_position_priority

的项目