我正在设计一个系统,其中包含与某些操作相关的逻辑步骤(但这些操作不是问题的一部分,但它们对于列表中的每个步骤都至关重要)!
我需要创建一种以有序方式定义所有逻辑步骤的方法,以便我可以通过查询获取列表,并在以后进行修改!
有这种数据库设计经验的人吗?
我一直在想有一个名为wizard_steps(或类似的东西)的列,然后使用优先级来制作订单,但由于某种原因我觉得这个设计在某些时候会失败(由于优先级相同的项目,然后添加新项目将重新排列其余项目,等等)!
我一直在考虑的另一个设计是使用“next item”作为wizard_step列中的一列,但我觉得这不是正确的步进式战斗机!
总结一下;我正在尝试制作一个列表(并且设计应该是开放的,以支持多个列表),这些元素的顺序至关重要!
关于数据库应该是什么样子的任何想法?
谢谢!
编辑:我发现这个yii组件我将查看:http://www.yiiframework.com/extension/simpleworkflow/
可能是一个很好的解决方案!
答案 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