|
|
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
Сижу, БД проектирую. В системе есть некий "обект", с которым можно что-то делать. Назвал это что-то заданием - "Task" (по сути - только группировка логически связанных подзаданий.). Каждое задание состоит из подзананий - "Entry" (выполняют конкретные действия над некими элементами). Эти Entry привязанны к различным таблицам, в соответствии с их предназначением. В остальном структура Task и Entry полностью совпадает. Пример диаграммы прилагается. И таких заданий еще пять штук . А потом может быть и больше. Если немного конкретики - то допустим система управляет устройствами, обедененными в группы. "Task1" для группы - смена конфигурации в зависимости от фазы луны. "Entry1" - смена конфигурации отдельного устройства. Task2 - преобразование устройства в гигантского боевого человекоподобного робота. и т.д. Вопрос: как бы все Task и все Entry объеденить в в одну таблицу соответственно? Можно тупо оставить одну таблицу Task и одну таблицу Entry . Прописать в Entry какое-нибуть поле Type и на его основе принимать решение какими связями пользоваться. Но тогда и в таблицу Task поле Type тоже добавлять надо. Ибо по логике приложения плевало оно на то какие там подзадания. Можно слить в одну таблицу только Task. И в зависимости от типа выбирать соответствующий Entry. Но это тоже не кошерно - дублирование информации в разных таблицах... Может кто-нибуть посоветовать что-нибуть лишенное этих недостатков? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 12:40 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
AmdeiИ таких заданий еще пять штук . А потом может быть и больше.если немного больше, то делайте отдельные таблицы и не переживайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 15:15 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
Amdei Можно тупо оставить одну таблицу Task и одну таблицу Entry . Прописать в Entry какое-нибуть поле Type и на его основе принимать решение какими связями пользоваться. Но тогда и в таблицу Task поле Type тоже добавлять надо. А зачем в Task поле Type? Почему на один кортеж Task не может быть несколько Entry, с разными Type? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 16:34 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
KGP Amdei Можно тупо оставить одну таблицу Task и одну таблицу Entry . Прописать в Entry какое-нибуть поле Type и на его основе принимать решение какими связями пользоваться. Но тогда и в таблицу Task поле Type тоже добавлять надо. А зачем в Task поле Type? Почему на один кортеж Task не может быть несколько Entry, с разными Type? По логике - не положено. Все Entry функционально одинаковы и принадлежат только одному Task. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 16:54 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
Amdei KGP Amdei Можно тупо оставить одну таблицу Task и одну таблицу Entry . Прописать в Entry какое-нибуть поле Type и на его основе принимать решение какими связями пользоваться. Но тогда и в таблицу Task поле Type тоже добавлять надо. А зачем в Task поле Type? Почему на один кортеж Task не может быть несколько Entry, с разными Type? По логике - не положено. Все Entry функционально одинаковы и принадлежат только одному Task. Если у вас по логике в Task должны быть только однотипные Entry, то зачем Type в Entry? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 17:07 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
KGPЕсли у вас по логике в Task должны быть только однотипные Entry, то зачем Type в Entry?Ну, в общем ты прав. Можно оставить Type только в Task. И по мере надобности его оттуда вытаскивать. Меня смущает другое: а именно то, что если забубенить все Entry в одну таблицу, и принимать решение о том, какие связи из Entry использовать на основани Type того Task которому они принадлежат - то таблица Entry распухнет от неиспользуемых связей. А так как большая часть Entry имеет непересекающиеся связи, то все они должны быть необязательными. И как её целостность тогда поддерживать? Страшными тригерами в больших количествах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 17:36 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
Amdei Меня смущает другое: а именно то, что если забубенить все Entry в одну таблицу ... Может и все Entry, но не всё вообще, что относиться к Entry. Приведите конкретный пример - получите более конкретный ответ ... или поищите по слову реализация наследования, ООП ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 17:47 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
AmdeiМеня смущает другое: а именно то, что если забубенить все Entry в одну таблицу, и принимать решение о том, какие связи из Entry использовать на основани Type того Task которому они принадлежат - то таблица Entry распухнет от неиспользуемых связей. А так как большая часть Entry имеет непересекающиеся связи, то все они должны быть необязательными. И как её целостность тогда поддерживать? Страшными тригерами в больших количествах?Я что-то не понял: 1) Почему должна распухнуть таблица Entry? Если в нее не добавлять несуществующие связи, то и пухнуть она не будет. 2) Посмотри вот сюда , может чем поможет. ИМХО - ситуация похожа, просто есть еще одна таблица. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 19:59 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
Bely1) Почему должна распухнуть таблица Entry? Если в нее не добавлять несуществующие связи, то и пухнуть она не будет. Я в том смысле что полей для связей там будет много. Часть из них будет использоваться (в зависимости от типа Task), часть - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 21:38 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
Amdei Bely1) Почему должна распухнуть таблица Entry? Если в нее не добавлять несуществующие связи, то и пухнуть она не будет. Я в том смысле что полей для связей там будет много. Часть из них будет использоваться (в зависимости от типа Task), часть - нет.Я что-то не понял.... таблица "Entry" будет ссылаться на доп таблицы? Можно сделать по другому - пусть доп таблицы ссылаются на таблицу Entry. И никаких доп. полей в Entry заводить не надо. посмотрите еще раз на ссылку, которую я дал - там детальные таблицы ссылаются на основную (а не наоборот). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2007, 10:47 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
AmdeiСижу, БД проектирую. В системе есть некий "обект", с которым можно что-то делать. Назвал это что-то заданием - "Task" (по сути - только группировка логически связанных подзаданий.). Каждое задание состоит из подзананий - "Entry" (выполняют конкретные действия над некими элементами). Эти Entry привязанны к различным таблицам, в соответствии с их предназначением.Расскажите поподробней про саму задачу. Мне не очень понятно что значит "Эти Entry привязанны к различным таблицам" . Эта привязка - что это означает? У Entry есть несколько свойств, которые ссылаются на справочники? Или у каждого Entry есть еще доп.параметры, которые лежат в других таблицах (например список товаров, которые надо закупить для выполнения задания). Опишите задачу обычными словами, что необходимо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2007, 10:58 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
BelyЭта привязка - что это означает? Или у каждого Entry есть еще доп.параметры, которые лежат в других таблицах (например список товаров, которые надо закупить для выполнения задания).Да, именно так. В зависимости от типа задания логика выполнения каждого его элемента (элементы - это Entry) различна. По логике одного задания (допустим, смена конфигурации устройства) - две связи с таблицей конфигураций (что на что сменить). Для превращения в ус-ва в ГБЧР - связь с таблицей этих самых ГБЧР. И т.д. Допустим Task - "Покрасить все дома в районе". Тогда Entry - "Покрасить дом №7" Entry привязана к таблице "Краска" (из которой берет параметр "Цвет") и к таблице "Характеристики дома", из которой берет параметр "Площадь фасада". Так нормально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2007, 13:56 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
AmdeiДопустим Task - "Покрасить все дома в районе". Тогда Entry - "Покрасить дом №7" Entry привязана к таблице "Краска" (из которой берет параметр "Цвет") и к таблице "Характеристики дома", из которой берет параметр "Площадь фасада".Я бы предложил следующий вариант: Код: plaintext 1. 2. 3. 4. 5. В зависимости от типа в TASK_ITEMS - мы должны лезть в соответствующую таблицу: TSK_ITEM_TYPE_1,2,3 вот в них уже будут ссылки на конкретные елементы в других таблицах. Где надо - на справочник красок, где надо - на документ счета, где надо - на ответственного сотрудника. примерно так... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2007, 14:30 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
Я мыслю Вашу структуру так. 1. Таблица ПРОЕКТЫ - укрупненный взгляд на предметную область имеют название, может иметь срок готовности, ответсвенного и т.п. 2. Таблица СОСТАВ ЗАДАЧ - имеет иерархическую структуру, то есть задача имеет подзадачи любой степени вложенности. "Корень" задачи хранится в таблице ПРОЕКТЫ и Вы можете раскрутить задачи от корня до листьев. Задачи состоят из ОПЕРАЦИЙ. 3. Таблицы РЕСУРЫ имеется в виду все, что необходимо для обеспечения выполнения ЗАДАЧ. Некоторые ресурса также могут иметь иерархическую структуру ил "раскручиваться" по входящим. А двльше уже идут Ваши объекты предметной области, на которые необходимо завести нормы расхода РЕСУРСОВ с учетом ОПЕРАЦИЙ (например капитальный ремонт, покраска, ремонт кровли...). То есть предлагается наполнить Ваши отношения функциональностью и уйти от "всеядности" таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2007, 19:22 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
последние сущности ссылаются на TaskEntry (1-к-1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 10:38 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
Роман Дынникпоследние сущности ссылаются на TaskEntry (1-к-1) То есть покраска 3-х домов по очереди (три по плану, один или два или три по факту) у вас будет занимать 3 таблицы? имхо выб тогда уж и аттрибуты раскидали примерно - чтоб было ясно о чем речь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 12:15 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
KGPТо есть покраска 3-х домов по очереди (три по плану, один или два или три по факту) у вас будет занимать 3 таблицы? имхо выб тогда уж и аттрибуты раскидали примерно - чтоб было ясно о чем речь. Автор не объяснил что это за 3 последние таблицы (одна и две других в первом сообщении) , я просто ответил на вопрос, как это будет выглядеть теоритически. А теоретически - это агрегация/композиция на 1-к-1 связях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 12:25 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
Роман Дынник KGPТо есть покраска 3-х домов по очереди (три по плану, один или два или три по факту) у вас будет занимать 3 таблицы? имхо выб тогда уж и аттрибуты раскидали примерно - чтоб было ясно о чем речь. Автор не объяснил что это за 3 последние таблицы (одна и две других в первом сообщении) , я просто ответил на вопрос, как это будет выглядеть теоритически. А теоретически - это агрегация/композиция на 1-к-1 связях. мне не понятно почему 1-к-1 ... теория без практики мертва, в частности мне не ясно КАК вы практическую покраску раскидаете аттрибутами по сущностям. EntryN - эти таблицы ЧТО именно содержат, ЧТО вас привело к 1-к-1 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 12:33 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
KGPEntryN - эти таблицы ЧТО именно содержат, ЧТО вас привело к 1-к-1 ? Что за таблицы надо спросить у автора. Может быть и не 1-к-1, а n-к-1 (тоже к автору), главное связь от EntryN к TaskEntry, а не наоборот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 13:09 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
Роман Дынник KGPEntryN - эти таблицы ЧТО именно содержат, ЧТО вас привело к 1-к-1 ? Что за таблицы надо спросить у автора. Может быть и не 1-к-1, а n-к-1 (тоже к автору), главное связь от EntryN к TaskEntry, а не наоборот. Ясно, вы ведете речь просто о наличии в EntryN FK к TaskEntry ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 13:15 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
KGPЯсно, вы ведете речь просто о наличии в EntryN FK к TaskEntry да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 13:19 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
Всем спасибо. Подумал и пришел к выводу, что без наследования действительно не обойтись. Вот что у меня в результате получилось (наследование Complete и Mutually Exclusive)+ (Generate Parent+Generate Children+Inherit Only Primary Attributes). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 15:54 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
А, пардон, в таблице Task еще поле Type наличиствует. По значению этого поля выбирается соответствующий наследник TaskEntry и из него - все необходимые атрибуты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 15:57 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
AmdeiА, пардон, в таблице Task еще поле Type наличиствует. По значению этого поля выбирается соответствующий наследник TaskEntry и из него - все необходимые атрибуты. тогда верно отобразить Task Type как отдельную типовую сущность и связь Task 0...n -> 1 Type ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 16:14 |
|
||
|
Много похожих таблиц: как объеденить?
|
|||
|---|---|---|---|
|
#18+
KGP AmdeiА, пардон, в таблице Task еще поле Type наличиствует. По значению этого поля выбирается соответствующий наследник TaskEntry и из него - все необходимые атрибуты. тогда верно отобразить Task Type как отдельную типовую сущность и связь Task 0...n -> 1 TypeА есть ли в этом смысл, при условии что кол-во различных Type - ровно 6. И изменяться не будет. А даже если и будет, то это приведет к добавлению нового наследника от TaskEntry. Т.е. один хрен к редизайну базы? Или в этом какие-то иные преимущества? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 16:19 |
|
||
|
|

start [/forum/topic.php?fid=32&startmsg=35007097&tid=1544134]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
162ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 420ms |

| 0 / 0 |
