|
|
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Всем добрый день) У меня возникла довольно интересная задача, которую я сомневаюсь как реализовать. В задаче есть Программы, у Программ есть Подпрограммы. То есть Подпрограммы должны быть связаны с Программами как многие к одному. Так же есть Мероприятия, которые могут быть и у Программ и у Подпрограмм (сами данные в Мероприятиях одинаковые). И есть Показатели, которые могут быть и Мероприятий, и у Подпрограмм, и у Программ (данные в Показателях также одинаковые). У меня пока есть три варианта: 1) реализовать все Мероприятия в одной таблице и Показатели в другой таблице. У Мероприятий сделать два внешних ключа на Подпрограммы и Программы. У Показателей 3: на Мероприятия, Подпрограммы, и Программы; 2) реализовать схему Программы <- Подпрограммы <- Мероприятия <- Показатели. В Подпрограммах и Мероприятиях создавать ненужные элементы с наименованием "Отсутствует", чтобы, например, если Мероприятие должно быть у Программы, то его можно было привязать к её Подпрограмме "Отсутствует"; 3) реализовать Мероприятия в 3-х таблицах и Показатели в 2-х. Хотелось бы у вас спросить, как мне лучше и правильнее реализовать данную задачу. Заранее спасибо) Модератор: Тема перенесена из форума "Microsoft SQL Server". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2016, 17:01 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
>лучше и правильнее Давайте свои критерии лучшести и правильности, например Объем базы, критичные запросы, требования к времени отклика Если человек не знает куда он плывет - то для него нет попутного ветра. (С) Сенека ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2016, 16:40 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
SERG1257, Объём базы очень маленький 1 Гб, критичных запросов нет, требований к времени отклика тоже нет (с таким объёмом всё должно летать). Меня просто интересует классический подход к решению таких задач. Первый раз с такой столкнулся) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2016, 17:16 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Ну если просто по феншую, то мне первый вариант больше нравится. Добавьте check на таблицы Мероприятий и Показателей чтобы заполненной была только одна ссылка из двух (трех) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2016, 18:26 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Есть еще один вариант - "Наследование в рамках РМД". Сделать сущности "ВладелецМероприятий", "ВладелецПоказателей" и установить связи 1:0..1 c Вашими "Программами", "Подпрограммами" и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2016, 18:46 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Марков Илья, Я бы программы и подпрограммы положил в одну иерархическую таблицу, а показатели реализовал как EAV. Мероприятия остались бы простой таблицей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2016, 18:54 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
SERG1257Ну если просто по феншую, то мне первый вариант больше нравится. Добавьте check на таблицы Мероприятий и Показателей чтобы заполненной была только одна ссылка из двух (трех) Ну вот мне первый вариант тоже больше нравится. Кот МатроскинЕсть еще один вариант - "Наследование в рамках РМД". Сделать сущности "ВладелецМероприятий", "ВладелецПоказателей" и установить связи 1:0..1 c Вашими "Программами", "Подпрограммами" и т.п. Можно немножко поподробнее, пожалуйста. Если я правильно понимаю, то появляется промежуточный слой таблиц. "ВладелецМероприятий" будет связано с "Программами" и "Подпрограммами", а "ВладелецПоказателей" с "Программами", "Подпрограммами" и "Мероприятиями". А сами "Мероприятия" и "Показатели" будут иметь связь многие к одному с "ВладелецМероприятий" и "ВладелецПоказателей" соответственно. Если это так, то чем данная реализация отличается от первого варианта (кроме как вытаскивания внешних ключей в базовые таблицы)? EgoрЯ бы программы и подпрограммы положил в одну иерархическую таблицу, а показатели реализовал как EAV. Мероприятия остались бы простой таблицей. Программы и Подпрограммы в одну иерархию запихнуть не могу. Существуют ещё множество таблиц. Я потом на этом собаку съем) К тому же Программы уже предполагается сделать иерархией для хранения шапок Программ и их различных версий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 00:21 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Марков ИльяКот МатроскинЕсть еще один вариант - "Наследование в рамках РМД". Сделать сущности "ВладелецМероприятий", "ВладелецПоказателей" и установить связи 1:0..1 c Вашими "Программами", "Подпрограммами" и т.п. Можно немножко поподробнее, пожалуйста. Если я правильно понимаю, то появляется промежуточный слой таблиц. "ВладелецМероприятий" будет связано с "Программами" и "Подпрограммами", а "ВладелецПоказателей" с "Программами", "Подпрограммами" и "Мероприятиями". Нет. Не "ВладелецМероприятий" будет связан с "Программами" и "Подпрограммами", а "Программы" и "Подпрограммы" будут связаны с "ВладельцемМероприятий". Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 00:59 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Марков ИльяК тому же Программы уже предполагается сделать иерархией для хранения шапок Программ и их различных версий.По мне, так скорее версии нужно в отдельную таблицу складывать, чем объединять их с Программами в одной. У каждого свои собаки на ужин. :)) Кстати, про версионность Программ в вашей задачке не было ни слова. Может и еще что-нибудь забыли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 08:37 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, Не совсем понимаю, в чем преимущества данного метода и сущностей владельцев? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 09:18 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Egoр, У меня версионность Программ с полным их содержимым. Решил хранить все в одних таблицах, так как объем небольшой + часто нужен доступ как к последним версиям, так и к стареньким. Версионность вообще конечно можно опустить, мне бы без неё увидеть хорошие методы решения моей задачи. Кстати, спасибо за наводку на EAV, тоже не плохой вариант) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 09:21 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Марков Илья, Как минимум ее гораздо проще расширять - при добавлении еще одной сущности, которая может обладать мероприятиями или показателями, существующие таблицы не меняются никак. У Вас показатели могут быть у трех сущностей - а если бы у 10-ти? В Вашем первом варианте делали бы 10 ссылок? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 09:41 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, Но ведь тогда в данной ситуации будет обратная сторона монеты. Если у Программ и Подпрограмм помимо Мероприятий и Показателей было бы что-то ещё, то тогда было бы ещё больше Владельцев и внешних ключей на них. Но думаю, если такое пойдёт, то уже EAV реально в помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 09:48 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Марков ИльяКот Матроскин, Но ведь тогда в данной ситуации будет обратная сторона монеты. Если у Программ и Подпрограмм помимо Мероприятий и Показателей было бы что-то ещё, то тогда было бы ещё больше Владельцев и внешних ключей на них. Не совсем - в данном случае, например, не нужно два ключа, достаточно одного, поскольку "ВладельцаМероприятий" можно точно так же унаследовать от "ВладельцаПоказателей". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 09:58 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, А, теперь понятно) а это не считается слишком запутанной архитектурой БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 10:07 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Марков Илья, Мной - не считается :) В сравнении с EAV это имхо ясная и стройная архитектура. Обратите внимание, что в большинстве запросов эти дополнительные таблицы не нужны и, соответственно, их не усложняют - они только обеспечивают ссылочную целостность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 10:22 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинМарков Илья, Обратите внимание, что в большинстве запросов эти дополнительные таблицы не нужны Почему же? Чтобы в одном запросе, например, вытащить Программы и Мероприятия, мне нужно всё равно по доп. таблице пробежаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 10:27 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Марков ИльяКот МатроскинМарков Илья, Обратите внимание, что в большинстве запросов эти дополнительные таблицы не нужны Почему же? Чтобы в одном запросе, например, вытащить Программы и Мероприятия, мне нужно всё равно по доп. таблице пробежаться. Выбрать Программы и Мероприятия этих программ? зачем для этого дополнительная таблица? Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 10:34 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, Блин, и вправду) я почему-то не подумал о соединении сразу по внешним ключам. Спасибо за оригинальную идею! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 10:38 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, Но если делать наследование владельцев, чтобы вытащить Программы с Показателями нужно всё равно же пробежаться по Владельцам Мероприятий? Или я опять туплю))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 10:39 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Марков Илья Но если делать наследование владельцев, чтобы вытащить Программы с Показателями нужно всё равно же пробежаться по Владельцам Мероприятий?Да ты должен будешь сделать left join со ВСЕМИ таблицами, но так как у тебя есть сквозная нумерация IDEventOwner (для чего собственно таблица EventOwner и нужна) то в результате будет только то что надо. Версионность (постановку задачи) тоже тут вываливай. Одна из популярных тем здесь, наряду с наследованием, таблицами с неизвестной структурой (EAV). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 16:39 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Добавлю ключи Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 16:45 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин,SERG1257 для чего собственно таблица EventOwner и нужна Для чего нужна таблица EventOwner? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 16:46 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
Egoр Для чего нужна таблица EventOwner? Для того чтобы на нее наложить ограничение уникальности или первичного ключа Также туда можно засунуть другие общие поля типа short_name, full_description, date_create, date_last_changed etc. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 17:22 |
|
||
|
Проектирование однотипных данных с разными связями на другие таблицы
|
|||
|---|---|---|---|
|
#18+
SERG1257Да ты должен будешь сделать left join со ВСЕМИ таблицами Ну разве что по Владельцам показателей не надо) EgoрДля чего нужна таблица EventOwner? Для вытаскивания всех владельцев мероприятий (то есть Программ, Подпрограмм и др. таблиц, которые могут появиться в дальнейшем) в одну базовую таблицу, на которую и будут ссылаться все Мероприятия. SERG1257Также туда можно засунуть другие общие поля типа short_name, full_description, date_create, date_last_changed etc. Не понимаю, общие поля чего? SERG1257Версионность (постановку задачи) тоже тут вываливай. Одна из популярных тем здесь, наряду с наследованием, таблицами с неизвестной структурой (EAV). Задача состоит в реализации полного архивирования Программы (со всеми внутренностями) и копирования её для внесения дальнейших изменений по запросу пользователя. Архивы и текущие версии Программ собираюсь хранить в этих же таблицах (данных мало, запросы к архивам будут не редкие). Саму таблицу Программ буду делать в виде иерархии: один уровень - шапка Программы, второй уровень - её версии. Всё остальное в виде обычных таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 18:17 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=39263477&tid=1540312]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 496ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...