![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
_Y_ |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: нет Всего: 34 |
Добрый день! Попалась задача, требующая создания БД с весьма неопределеной структурой полей в таблице. Посмотрите, пожалуйста, мои пространные рссуждения и скажите нет ли для тех же целей более достойных решений. (БД я занимался, но с подобными задачами не сталкивался).
1. Имеется производство неких деталей. Каждую деталь нужно измерить и занести результаты измерений в БД. 2. У каждой детали есть три измерения, L1, L2 и L3. Скажем, длина-ширина-высота, но это не важно – только для примера. Получается весьма простая таблица:
3. Проблема в том, что детали бывают разные. Некоторые имеют больше трех измерений. При этом, четвертое измерение L4 для какой-то будет диаметром отверстия, а для какой-то чем-то еще. А может быть еще и L5 и так далее. Понятно, что наибольшей дуростью была бы попытка предсказать все возможные варианты и писать все в большую таблицу, оставляя пустые поля для тех деталей, для которых данные измерения просто не существуют. 4. Если решать задачу в лоб, надо составлять по еще одной таблице для каждого необязательного измерения и связывать таблицы между собой через ID. Но это значит, что появление в производстве каждой новой детали требует наращивания структуры базы. 5. Вот я и подумал, а не сделать ли две таблицы. Первая с теми величинами, которые известны для каждой записи. Например та же
6. Я понимаю, что поиск в такой базе будет не самым эффективным, но база производственная и сложные SQL запросы будут посылаться разве что при отладке. На практике же запросы будут жестко зашиты в коде интерфейса и любую сложность можно будет обработать вне SQL. Теперь мои вопросы. а) Каких гадостей можно ожидать от такой структуры? б) Имеет ли смысл наиболее частые величины из второй таблицы перенести в первую, позволив, соответственно, некоторым полям оставаться незаполненными? В этом случае, каковы могут быть критерии, по которым оценивается где должен находиться параметр: в главной таблице или в таблице дополнительных параметров? Спасибо. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
||||||||||
|
|||||||||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 5 Всего: 260 |
о, это же wiki: entity-attribute-value model
![]() "гадости" могут быть при относительно сложных запросах: большое количество inner join'ов. скажем так: не самым удобным. Если тебе надо искать только по параметру А, то никаких проблем. А вот если по параметру А и по В, или же по А и В или по С, то тут уже в такой модели будет непросто построить адекватный запрос. |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
1)Как ты уже обозначил - усложняются поисковые запросы 2)При добавлении новых параметров пользователи, возможно, захотят отображать их значения в табличном представлении. Это приводит к тому, что запросы, возможно, придется строить динамически, не имея при том возможности влиять на план этих запросов. Мое мнение, пользователей лучше заведомо ограничить в этом их желании. 3)Может возникнуть необходимость использовать один из определенных пользователем параметров при реализации системной логики. Этого допускать нельзя. В случае возникновения такой необходимости, нужно расширять главную таблицу. Это, собственно, уж и есть ответ на твой вопрос б) Это сообщение отредактировал(а) Zloxa - 29.10.2010, 15:39 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: нет Всего: 34 |
skyboy, в том и дело, что поиск там если и потребуется, то только по ID детали. Вся база - просто производственный лог. Информация извлекается если пришла рекламация от потребителя или проблема возникла. Никому никогда не понадобится выборка вроде "Все детали с размером L2 от 1 до 2 мм".
Это сообщение отредактировал(а) _Y_ - 29.10.2010, 15:26 -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
нет, это один из ее вырожденных вариантов - UDA - user defined attrs. В нем вырождено понятие энтиити, и, в связи с этим, уходит целый ряд недостатков модели EAV. Это сообщение отредактировал(а) Zloxa - 29.10.2010, 15:36 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: нет Всего: 34 |
От этого я не понял к сожалению. Что значит "использование параметра для реалозации системной логики"? -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 5 Всего: 260 |
||||
|
||||
Zloxa |
|
||||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Читай "в коде приложения". Т.е. когда значение используется не только для принятия какого либо решения пользователем(человеком), но и для принятия решения какого то программного модуля. Не стоит хардкодить эти самые UDA. Т.е. если у тебе в коде придется использовать чтото вроде "if get_udaval_by_udaid(5)= 3 then бла else блым", правильнее расширить атрибуты основной таблицы. Добавлено через 1 минуту и 15 секунд
она не мета сущность. EAV поразумевает ко всему еще и динамическое создание ентитей. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
||||
|
|||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Вернее не так. Вернее будет так: В модели, где все метасущности EAV состоят в отношениях исключительно с не мета сущностьями(таблицами), средствами СУБД становится возможно обеспечить согласованность данных, что снимает основной, и наиглавнейший, с моей точки зрения, недостаток EAV. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
Каков прогноз на размер базы, скорость её роста, количество доп. параметров к трём основным и прогноз роста этого количества, а также прогноз количества запросов (как на запись, так и на выборки)? А то может статься, что выборки делаются раз в неделю, и база на сто тыщ записей - тогда какой заниматься всей этой оптимизацией? в целях самосовершенствования? ну так это достаточно проделать теоретически... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: нет Всего: 34 |
немного утрировано, но в корне верно.
Думаю, новое изделие будет добавлятся раз 10 в день максимум, данные для каждого изделия, находяшегося в производственном процессе будут корректироваться/уточнятся раз в несколько минут (разные измерения делаются на разных стадиях и по ходу дела уточняюстя), а вот запросы на выборку к базе будут только со стороны оператора и только иногда - по надобности. При этом подавйлающее большинство запросов будут простейшими: выдать характеристики одного конкретного изделия. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
БелАмор |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 10.6.2010 Где: Россия Репутация: нет Всего: 17 |
Если максимальное количество параметров заранее известно, то можно сделать примерно так:
|
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: нет Всего: 34 |
В том-то и дело, что неизвестно. К тому же, для разных деталей количество параметров разное. К этому добавить, что некоторые детали будут дополнительно проанализированы по каким-нибудь еще экзотическим параметрам - например отправлены в лабораторию для анализа структуры материала. В общем, как я понял, в моих изначальных рассуждениях особых дефектов нет. База функции свои исполнять будет. Помимо прямых советов, я теперь знаю слова "entity-attribute-value mode" и "UDA - user defined attrs". Скажу их клиенту. Ему приятно будет чувствовать высокотехнологичность задачи, которую для него решаем ![]() Спасибо большое! Закрываю тему. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Общие вопросы по базам данных" | |
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |