Разработка базы данных для пошагового мастера - PullRequest
0 голосов
/ 18 октября 2011

Я разрабатываю систему, содержащую логические шаги с некоторыми связанными действиями (но действия не являются частью вопроса, но они важны для каждого шага в списке)!

Дело в том, что мне нужно создать способ для определения всех логических шагов упорядоченным образом, чтобы я мог получать список по запросу, а также вносить изменения позже!

Кто-нибудь с некоторым опытом в такого рода проектировании баз данных?

Я думал о наличии столбца с именем wizard_steps (или чего-то подобного), а затем использую приоритет для выполнения заказа, но по какой-то причине я чувствую, что этот дизайн в какой-то момент потерпит неудачу (из-за элементов с таким же приоритетом, добавление новых элементов должно было бы изменить порядок остальных элементов и т. д.)

Другой дизайн, о котором я думал, - это использование «следующего элемента» в качестве столбца в столбце wizard_step, но я не думаю, что это правильный шаг вперед!

Итак, подведем итог; Я пытаюсь составить список (и дизайн должен быть открыт для поддержки нескольких списков) элементов, где порядок имеет решающее значение!

Есть идеи, как должна выглядеть база данных?

Спасибо!

РЕДАКТИРОВАТЬ: Я нашел этот компонент yii, я проверю: http://www.yiiframework.com/extension/simpleworkflow/

Может быть хорошим решением!

1 Ответ

1 голос
/ 18 октября 2011

Если я вас поправлю, ваша главная задача - создать схему, которая поддерживает упорядоченные списки и , которые могут легко вставлять / переупорядочивать элементы.

Следующая схема таблицы:

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

, связанный со связаннымlist:

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

Будет сложно запросить и update (вы должны обновить связанный список внутри транзакции, иначе ваш связанный список может быть поврежден).

Я бы предпочел первое решение для простоты.

В зависимости от частоты обновления вы можете рассмотреть возможность использования больших приращений между 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...