2011-10-18 10 views
0

いくつかのアクションが関連付けられた論理ステップを含むシステムを設計しています(ただし、アクションは質問の一部ではありませんが、リストの各ステップで重要です)。ステップバイステップウィザードのデータベースデザイン

私は、すべての論理ステップを順序付けられた方法で定義する方法を作成する必要があるため、クエリでリストを取得し、後で変更することもできます。

この種のデータベース設計に経験がある人はいますか?

私はwizard_steps(または類似のもの)という名前の列を考えていましたが、優先順位を使って注文をしましたが、何らかの理由でこのデザインが失敗すると感じています(同じ優先順位の項目新しいアイテムを追加すると残りのアイテムを並べ替える必要があります)。

私が考えてきた別のデザインは、wizard_step列の列として「次のアイテム」を使用することですが、これは正しいステップ・エイマーだとは思われません!

要約すると、私は、順序が重要である要素のリストを作成しようとしています(複数のリストをサポートするのに十分な設計が必要です)!

データベースの外観に関する考え方はありますか?

ありがとうございます!

編集:私は、私がチェックアウトします。このYiiのコンポーネントが見つかりました:http://www.yiiframework.com/extension/simpleworkflow/

は良い解決策かもしれません!

+0

どの言語を使用しているのかわかりませんが、ワークフローエンジンを検討しています(例: .NET世界でのWindows WorkFlow Foundation)?それはあなたが記述したものとほとんど同じですが、素敵なGUIデザイナーと再スタート可能性のような機能を無料で提供します。 –

+0

私はphpとyii-frameworkとmysqlを使用していますので、データベースの設計が必要です! –

+0

なぜ賛成投票ですか? –

答えて

1

私がうまくいけば、主な関心事は、注文リストをサポートするスキーマを作成することです。は、項目の挿入/並べ替えを簡単に行うことができます。

次の表の設計:

id_list first_item_id 
1  45 
2  38 

アイテム定義を持つテーブルに結合
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 

を容易に照会するが、維持が困難になり、特に挿入

ための1つすなわちリンクリストに結合された

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 

EDIT:

ここでうまくいけば、挿入するためのスペースを作るだろうクエリがあります:引数の上にあるすべての行の優先度をインクリメントします。

$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

+0

あなたは私の主な関心事です。ここでは、簡単に追加/並べ替えと照会ができる順序付けリストが必要です。また、柔軟で破られない* –

+1

@ code-zoopサンプルクエリを追加しました。簡単な解決法#1。基本的には、1つのしきい値を超えるすべてのリストアイテムの優先度をインクリメントして挿入の余地を作ります。 –

関連する問題