powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как избежать дублирования информации при вынесении типа в отдельную сущьность?
10 сообщений из 10, страница 1 из 1
Как избежать дублирования информации при вынесении типа в отдельную сущьность?
    #35017299
Amdei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По мотивам обсуждения предыдущей темы я нарисовал диаграмму, представленную ниже.


Суть в том, что у каждой задачи есть тип. Например "Побелка" и "Покраска".
Для каждого типа есть свой набор статусов. Например для побелки - "Ошкурено", "Побелено" а для покраски - "Нанесли первый слой", "Нанесли второй слой", "Сохнет", "Готово".

TaskEntry - пусть для простоты это будут разные стены или разные здания.

Всё прекрасно концептуально, но вот в реализации в таблицу TaskEntry попадает внешний ключ из таблицы EntryStatus.

Хотелось бы чтобы туда попадало только поле Code из таблицы EntryStatus.
Но это, как я понимаю, невозможно, потому что PK у EntryStatus - составной.

В каком месте ДНК у меня ошибка?
Как избежать дублирования информации при вынесении типа в отдельную сущьность?
...
Рейтинг: 0 / 0
Как избежать дублирования информации при вынесении типа в отдельную сущьность?
    #35017311
Amdei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот физическая модель для наглядности
...
Рейтинг: 0 / 0
Как избежать дублирования информации при вынесении типа в отдельную сущьность?
    #35017996
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем?
Т.е. сделать PK у EntryStatus - не составной - без проблем,
но засада в другом - TaskEntry по бизнесу вроде должен иметь только те статусы, какие имеет его TaskType . А это ограничение ("тот же самый") наборот требует мигрирования ключа TaskType (возможно AK, а не PK) в три другие таблицы.

Разбиралось на форуме, и вот еще .
...
Рейтинг: 0 / 0
Как избежать дублирования информации при вынесении типа в отдельную сущьность?
    #35018938
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmdeiВот физическая модель для наглядностиТут есть несколько вариантов:
1) Использовать составные ключи (естественные), возлагать логику правильности присвоения статусов - на constraint-ы. (Это как предлагает сделать "ModelR")
2) Использовать суррогатные ключи, логику правильности присвоения статусов возлагать на приложение.

у каждого метода - свои сторонники, свои плюсы, свои минусы.

К приведенной схеме могу добавить, что кроме указанной схемы еще используют ЕДИНЫЕ СТАТУСЫ.
т.е. имеется отдельная таблица СТАТУСЫ (или состояния) в которой перечесляются все статусы, которые есть в системе.

Далее в связующей таблице конкретные статусы связываются с типами объектов.
Таким способом для разных типов объектов можно получить одинаковый статус.
Например: "Работы завершены", "Ожидание оплаты" итп.
соответственно бизнес-логика может привязываться к этому единому статусу - если ей не важно какой именно тип объекта имеет этот статус.
...
Рейтинг: 0 / 0
Как избежать дублирования информации при вынесении типа в отдельную сущьность?
    #35024981
PWinter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объясните пожалуйста, что такое Task?
По концептуальной модели, это нечто, связанное с TaskType 0 к 1. Кроме того, получается, что несколько записей в TaskEntry могут ссылаться на одну и ту же запись в Task. Т.е. одна Task может объединять, скажем, TaskEntry со статусом "Нанесли второй слой" и TaskEntry со статусом "Ошкурено" - разного типа. Если это правильно, то зачем связь между Task и TaskType?
...
Рейтинг: 0 / 0
Как избежать дублирования информации при вынесении типа в отдельную сущьность?
    #35028138
Amdei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PWinterОбъясните пожалуйста, что такое Task?
По концептуальной модели, это нечто, связанное с TaskType 0 к 1.
Там фигня нарисована на модели - ошибку допустил при подготовке примера.
TaskType -> Task - один ко многим должно быть.
...
Рейтинг: 0 / 0
Как избежать дублирования информации при вынесении типа в отдельную сущьность?
    #35028176
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не пойму, а зачем вы вынесли EntryStatus в отдельную таблицу?
Ведь по логике Статус задачи является ее атрибутом. Или это сделано, что-бы у текущей задачи вести нечто вроде журнала состояний? Тогда где временные аттрибуты для этого журнала?
...
Рейтинг: 0 / 0
Как избежать дублирования информации при вынесении типа в отдельную сущьность?
    #35028196
Amdei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СтрадалецъНе пойму, а зачем вы вынесли EntryStatus в отдельную таблицу?
Ведь по логике Статус задачи является ее атрибутом. Или это сделано, что-бы у текущей задачи вести нечто вроде журнала состояний? Тогда где временные аттрибуты для этого журнала?Там тоже один-ко-многим должен был быть
...
Рейтинг: 0 / 0
Как избежать дублирования информации при вынесении типа в отдельную сущьность?
    #35028323
drev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Code из таблицы EntryStatuses является уникальным?
...
Рейтинг: 0 / 0
Как избежать дублирования информации при вынесении типа в отдельную сущьность?
    #35028443
Amdei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет. Они могут повторяться в разных TaskType. И для каждого TaskType их набор различен (в т.ч. и по количеству).
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как избежать дублирования информации при вынесении типа в отдельную сущьность?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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