powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Две взаминоссылающиеся таблицы - так можно ?
7 сообщений из 7, страница 1 из 1
Две взаминоссылающиеся таблицы - так можно ?
    #37110108
Не важно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравсвуйте.
Такая штука - есть таблица "Воркфлы" (ид, название)
есть таблица "Состояния воркфлы" (ид, ид_воркфлы, название_состояния)

Например:
"Воркфлы"(1,'Счет')
"Воркфлы"(2,'Продажа')

"Состояния воркфлы" (1, 1, 'Сформирован')
"Состояния воркфлы" (2, 1, 'Проверен')
"Состояния воркфлы" (3, 1, 'Утвержден')
"Состояния воркфлы" (4, 1, 'Отменен')

Согласно теории автоматов, у воркфлы должно быть определено начальное состояние системы.
И тут есть два варианта:
1) в таблицу состояний ввести булеву колонку "Начальное_Состояние". Тогда
станет:

"Состояния воркфлы" (1, 1, 1, 'Сформирован')
"Состояния воркфлы" (2, 1, 0, 'Проверен')
"Состояния воркфлы" (3, 1, 0, 'Утвержден')
"Состояния воркфлы" (4, 1, 0, 'Отменен')

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

2) В таблицу "Воркфлы" добавить ссылку на начальное состояние:
"Воркфлы"(1,'Счет', 1) - где 1, это референс на "Состояния воркфлы" с ид=1
Тут получается что две таблицы ссылаются друг на друга. Не уверен, что так делать правильно.

Что посоветуете?
...
Рейтинг: 0 / 0
Две взаминоссылающиеся таблицы - так можно ?
    #37110312
ultra_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не уверен, что "въехал" в вопрос, но...
Мне как-то было бы понятнее, если была бы табличка объектов (ваши "Воркфлы"), табличка состояний (ид, название состояния) и табличка связей (ид воркфлы, ид состояния). Тогда получается, что установив связь между "воркфлы" и "состояния" Вы задаете соответствующее состояние. А начальное состояние задаете установив начальные связи...
А вот если нужно запомнить именно начальное состояние (вы ж не пояснили, что вам конкретно нужно), то можно булевое поле внести в таблицу связей. А если следить за сменой состояний во времени, то нужно в таблицу связей внести datetime...
В общем, если что не так понял - не судите строго, а попробуйте лучше объяснить )
...
Рейтинг: 0 / 0
Две взаминоссылающиеся таблицы - так можно ?
    #37110478
Не важно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Объясняю:
К документу нужно присобачить состояния - проведен, отменен, утвержден и прочее.
Таких воркфлоу несколько - своя для документа "счет", своя для документа "продажи"

как я делаю:
Делаю таблицу "Воркфлы" - тут воркфлы какие в принципе могут быть
"Состояния воркфлы" - тут состоятния в какие может переходить воркфла из таблицы "Воркфлы"
Есть еще таблица "Переходы" вида (ид, ид_состояния_из_которого_переходим, ид_состояния_в_которое_переходим)

Берем например воркфлу 'Счет'. Доступные состояния: 'Сформирован', 'Проверен', 'Утвержден', 'Отменен'
И соответственно переходы:
'Сформирован' -> 'Проверен'
'Проверен' -> 'Утвержден'
'Проверен' -> 'Отменен'
'Проверен' -> 'Сформирован'

Воркфла должна начинаться с состояния 'Сформирован'. Неявно я не могу его вывести, поскольку есть переход 'Проверен' -> 'Сформирован' который закольцовывает воркфлу.
Чтобы понимать откуда начинать движение я должен пометить как то какое состояние вокфлы является начальным.
Сделать я это могу введя в таблицу "Состояния воркфлы" булево поле которое покажет откуда начинать движение или в таблице "Воркфлы" сделать ссылку на "Состояния воркфлы" с начальным состоянием - тогда получится что две таблицы ссылаются друг неа друга
...
Рейтинг: 0 / 0
Две взаминоссылающиеся таблицы - так можно ?
    #37110487
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не важноЧтобы понимать откуда начинать движение я должен пометить как то какое состояние вокфлы является начальным.
Сделать я это могу введя в таблицу "Состояния воркфлы" булево поле которое покажет откуда начинать движение или в таблице "Воркфлы" сделать ссылку на "Состояния воркфлы" с начальным состоянием - тогда получится что две таблицы ссылаются друг неа друга
можешь сделать числовое поле "Порядок обхода" в таблице "Состояния воркфлы"
начальное состояние - минимальное значение поля
...
Рейтинг: 0 / 0
Две взаминоссылающиеся таблицы - так можно ?
    #37110739
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 10.02.2011 21:03, Не важно wrote:

Так можно. Только одно из полей должно быть NULL, иначе
создать две такие записи можно только в СУБД, где есть
отложенная проверка FK в конце транзакции. Таких СУБД
очень мало, кажется, так делает только Оракл, и то я не
уверен.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Две взаминоссылающиеся таблицы - так можно ?
    #37112403
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не важноЗдравсвуйте.
...
Тут получается что две таблицы ссылаются друг на друга. Не уверен, что так делать правильно.
Что посоветуете?
Переводя Ваш вопрос на язык баз данных:
"Тут получается, что между двумя объектами есть две разных связи. Не уверен, что это может быть"
Странная неуверенность:) Разумеется между двумя объектами может быть более одной связи.
...
Рейтинг: 0 / 0
Две взаминоссылающиеся таблицы - так можно ?
    #37112779
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не важноТут получается что две таблицы ссылаются друг на друга. Не уверен, что так делать правильно.А что уж говорить о таблицах, которые ссылаются сами на себя ? Вообще, ужас :)

В принципе, чисто технически оба варианта вполне приемлемы.
Только в первом варианте в таблице состояний логическое поле "Начальное_Состояние" излишне. Достаточно минимальное(первое) значение поля "ид" в таблице "Состояния воркфлы" считать за начальное.
Во 2-ом варианте ссылка на первый элемент в таблице "Воркфлы" должна разрешать ввод NULL, о чем уже сказал MasterZiv.
Есть ещё и 3 вариант. Добавить ещё одну таблицу связи "Начальное_Состояние_Воркфлы" в которой будут поля (Воркфлы_ид, Состояния воркфлы_ид).

Но с другой стороны, это всё чисто вопросы реализации. Другой, более важный, вопрос, насколько корректна модель, которую Вы пытаетесь реализовать ? В общем случае состояния документов это не обязательно последовательность, а вполне себе граф, даже с циклами и с дополнительными условиями на очередной переход. К примеру, документ не может быть отклонён и отправлен на доработку более 2 раз, а на 3-й раз уходит на отказ. IMHO, есть повод подумать ещё раз над постановкой задачи.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Две взаминоссылающиеся таблицы - так можно ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]