Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> БД с гибкой структурой, дайте оценку моим рассуждениям 
V
    Опции темы
_Y_
Дата 29.10.2010, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: нет
Всего: 34



Добрый день! Попалась задача, требующая создания БД с весьма неопределеной структурой полей в таблице. Посмотрите, пожалуйста, мои пространные рссуждения и скажите нет ли для тех же целей более достойных решений. (БД я занимался, но с подобными задачами не сталкивался).

1. Имеется производство неких деталей. Каждую деталь нужно измерить и занести результаты измерений в БД.

2. У каждой детали есть три измерения, L1, L2 и L3. Скажем, длина-ширина-высота, но это не важно – только для примера. Получается весьма простая таблица:
Код

| ID | L1 | L2 | L3 |

3. Проблема в том, что детали бывают разные. Некоторые имеют больше трех измерений. При этом, четвертое измерение L4 для какой-то будет диаметром отверстия, а для какой-то чем-то еще. А может быть еще и  L5 и так далее. Понятно, что наибольшей дуростью была бы попытка предсказать все возможные варианты и писать все в большую таблицу, оставляя пустые поля для тех деталей, для которых данные измерения просто не существуют.

4. Если решать задачу в лоб, надо составлять по еще одной таблице для каждого необязательного измерения и связывать таблицы между собой через ID. Но это значит, что появление в производстве каждой новой детали требует наращивания структуры базы.

5. Вот я и подумал, а не сделать ли две таблицы. Первая с теми величинами, которые известны для каждой записи. Например та же
Код

| ID | L1 | L2 | L3 |
Вторая же
Код

| ID | Код параметра | Величина |
В результате если деталь характеризуется, например, шестью измерениями, в первой таблице будет одна запись, например
Код

| ID26 | 1.1 | 3.2 | 0.5 |
А во второй оставшиеся три измерения будут хранится каждое в своей записи
Код

| ID26 | L4 | 0.2 |
| ID26 | L7 | 1.9 |
| ID26 | L8 | 2.1 |
В этом случае любая новая конфигурация детали потребует только добавления новых кодов параметров, а то и просто новой комбинации кодов из уже имеющихся.

6. Я понимаю, что поиск в такой базе будет не самым эффективным, но база производственная и сложные SQL запросы будут посылаться разве что при отладке. На практике же запросы будут жестко зашиты в коде интерфейса и любую сложность можно будет обработать вне SQL.

Теперь мои вопросы. 
а) Каких гадостей можно ожидать от такой структуры?
б) Имеет ли смысл наиболее частые величины из второй таблицы перенести в первую, позволив, соответственно, некоторым полям оставаться незаполненными? В этом случае, каковы могут быть критерии, по которым оценивается где должен находиться параметр: в главной таблице или в таблице дополнительных параметров?

Спасибо. 



--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
skyboy
Дата 29.10.2010, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



о, это же wiki: entity-attribute-value model smile
"гадости" могут быть при относительно сложных запросах: большое количество inner join'ов. 
Цитата(_Y_ @  29.10.2010,  13:38 Найти цитируемый пост)
поиск в такой базе будет не самым эффективным

скажем так: не самым удобным. Если тебе надо искать только по параметру А, то никаких проблем. А вот если по параметру А и по В, или же по А и В или по С, то тут уже в такой модели будет непросто построить адекватный запрос.
PM MAIL   Вверх
Zloxa
Дата 29.10.2010, 15:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Цитата(_Y_ @  29.10.2010,  14:38 Найти цитируемый пост)
а) Каких гадостей можно ожидать от такой структуры?

1)Как ты уже обозначил - усложняются поисковые запросы 
2)При добавлении новых параметров пользователи, возможно, захотят отображать их значения в табличном представлении. Это приводит к тому, что запросы, возможно, придется строить динамически, не имея при том возможности влиять на план этих запросов. Мое мнение, пользователей лучше заведомо ограничить в этом их желании.
3)Может возникнуть необходимость использовать один из определенных пользователем параметров при реализации системной логики. Этого допускать нельзя. В случае возникновения такой необходимости, нужно расширять главную таблицу. Это, собственно, уж и есть ответ на твой вопрос б)

Это сообщение отредактировал(а) Zloxa - 29.10.2010, 15:39


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
_Y_
Дата 29.10.2010, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 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 (на правах саморекламы:)
PM MAIL WWW   Вверх
Zloxa
Дата 29.10.2010, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Цитата(skyboy @  29.10.2010,  15:13 Найти цитируемый пост)
это же wiki: entity-attribute-value mode

нет, это один из ее вырожденных вариантов - UDA - user defined attrs.
В нем вырождено понятие энтиити, и, в связи с этим, уходит целый ряд недостатков модели EAV.

Это сообщение отредактировал(а) Zloxa - 29.10.2010, 15:36


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
_Y_
Дата 29.10.2010, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: нет
Всего: 34



Цитата(Zloxa @  29.10.2010,  15:23 Найти цитируемый пост)
2)....пользователи, возможно, захотят ... пользователей лучше заведомо ограничить в этом их желании
 Именно это и предполагается. SQL пользователю доступен не будет. Будут жестко зашитые в интерфейсе простые варианты выбора: Найти характеристики такой-то детали; найти характеристики деталей такого-то типа выпущенных в такой-то период (даты, типы деталей и т.д. в отдельных таблицах, понятное дело. В моем описании я дал только то, что относится к самому моему вопросу).

Цитата(Zloxa @  29.10.2010,  15:23 Найти цитируемый пост)
3)Может возникнуть необходимость использовать один из определенных пользователем параметров при реализации системной логики. Этого допускать нельзя. В случае возникновения такой необходимости, нужно расширять главную таблицу. Это, собственно уж и есть ответ на твой вопрос б)
 От этого я не понял к сожалению. Что значит "использование параметра для реалозации системной логики"?



--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
skyboy
Дата 29.10.2010, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



Цитата(Zloxa @  29.10.2010,  14:26 Найти цитируемый пост)
В нем вырождено понятие энтиити

в смысле - "вырождено"? а "главная" таблица с "основными измерениями" - это не entity?
можешь подтолкнуть в нужном направлении?
PM MAIL   Вверх
Zloxa
Дата 29.10.2010, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Цитата(_Y_ @  29.10.2010,  15:37 Найти цитируемый пост)
От этого я не понял к сожалению. Что значит "использование параметра для реалозации системной логики"?

Читай "в коде приложения". 
Т.е. когда значение используется не только для принятия какого либо решения пользователем(человеком), но и для принятия решения какого то программного модуля.
Не стоит хардкодить эти самые UDA. Т.е. если у тебе в коде придется использовать чтото вроде "if  get_udaval_by_udaid(5)= 3 then бла else блым", правильнее расширить атрибуты основной таблицы.

Добавлено через 1 минуту и 15 секунд
Цитата(skyboy @  29.10.2010,  15:49 Найти цитируемый пост)
в смысле - "вырождено"? а "главная" таблица с "основными измерениями" - это не entity?

она не мета сущность. EAV поразумевает ко всему еще и динамическое создание ентитей.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Zloxa
Дата 29.10.2010, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Цитата(Zloxa @  29.10.2010,  15:50 Найти цитируемый пост)
она не мета сущность. EAV поразумевает ко всему еще и динамическое создание ентитей. 

Вернее не так.
Вернее будет так: В модели, где  все метасущности EAV состоят в отношениях исключительно с не мета сущностьями(таблицами), средствами СУБД становится возможно обеспечить согласованность данных, что снимает основной, и наиглавнейший, с моей точки зрения, недостаток EAV. 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 29.10.2010, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Цитата(_Y_ @  29.10.2010,  16:24 Найти цитируемый пост)
 Вся база - просто производственный лог. Информация извлекается если пришла рекламация от потребителя или проблема возникла.

Каков прогноз на размер базы, скорость её роста, количество доп. параметров к трём основным и прогноз роста этого количества, а также прогноз количества запросов (как на запись, так и на выборки)?
А то может статься, что выборки делаются раз в неделю, и база на сто тыщ записей - тогда какой заниматься всей этой оптимизацией? в целях самосовершенствования? ну так это достаточно проделать теоретически...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
_Y_
Дата 29.10.2010, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: нет
Всего: 34



Цитата(Akina @  29.10.2010,  16:23 Найти цитируемый пост)
...выборки делаются раз в неделю, и база на сто тыщ записей...
 немного утрировано, но в корне верно. 

Думаю, новое изделие будет добавлятся раз 10 в день максимум, данные для каждого изделия, находяшегося в производственном процессе будут корректироваться/уточнятся раз в несколько минут (разные измерения делаются на разных стадиях и по ходу дела уточняюстя), а вот запросы на выборку к базе будут только со стороны оператора и только иногда - по надобности. При этом подавйлающее большинство запросов будут простейшими: выдать характеристики одного конкретного изделия.



--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
БелАмор
Дата 29.10.2010, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 10.6.2010
Где: Россия

Репутация: нет
Всего: 17



Если максимальное количество параметров заранее известно, то можно сделать примерно так:
Код

| DTL_ID |  DTL_TYPE | L1 | L2 | L3 |

| DTL_TYPE| L1_NAME | L2_NAME | L3_NAME |

PM   Вверх
_Y_
Дата 31.10.2010, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: нет
Всего: 34



Цитата(БелАмор @  29.10.2010,  17:38 Найти цитируемый пост)
Если максимальное количество параметров заранее известно....

В том-то и дело, что неизвестно. К тому же, для разных деталей количество параметров разное. К этому добавить, что некоторые детали будут дополнительно проанализированы по каким-нибудь еще экзотическим параметрам - например отправлены в лабораторию для анализа структуры материала.

В общем, как я понял, в моих изначальных рассуждениях особых дефектов нет. База функции свои исполнять будет. 

Помимо прямых советов, я теперь знаю слова "entity-attribute-value mode" и "UDA - user defined attrs". Скажу их клиенту. Ему приятно будет чувствовать высокотехнологичность задачи, которую для него решаем smile 

Спасибо большое! Закрываю тему.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0910 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.