Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование БД для последующего статистического анализа / 13 сообщений из 13, страница 1 из 1
25.04.2014, 00:24
    #38625262
zhu
zhu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД для последующего статистического анализа
Подскажите как лучше организовать БД

смысл такой: есть химические элементы(ХЭ), из них можно сделать композицию(К) (кол-во ХМ в К может быть любое, как и их концентрация); эту композицию применяют для некоторого процесса - выходные характеристики процесса должны находится в таблице экспериментальных данных(ЭД).

Для статистического анализа нужно будет искать опыты в таблице ЭД по композиции(К), при этом концентрация ХЭ не важна, главное чтобы в композиции были только выбранные ХЭ.

сейчас схема выглядит так, как в прикрепленной фотке, но это неудобно для поиска.

Возможно у кого-то есть идеи как лучше организовать эту часть базы.
...
Рейтинг: 0 / 0
25.04.2014, 07:49
    #38625339
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД для последующего статистического анализа
zhuПодскажите как лучше организовать БД

смысл такой: есть химические элементы(ХЭ), из них можно сделать композицию(К) (кол-во ХМ в К может быть любое, как и их концентрация); эту композицию применяют для некоторого процесса - выходные характеристики процесса должны находится в таблице экспериментальных данных(ЭД).

Для статистического анализа нужно будет искать опыты в таблице ЭД по композиции(К), при этом концентрация ХЭ не важна, главное чтобы в композиции были только выбранные ХЭ.

сейчас схема выглядит так, как в прикрепленной фотке, но это неудобно для поиска.

Возможно у кого-то есть идеи как лучше организовать эту часть базы.

Почитайте про OLAP кубы.
Есть инструменты как платные, так и бесплатные, которые по исходным данным могут построить OLAP-куб в нужном разрезе.
А так, в первом приближении, спроектировано нормально.
Просто то, что вы просите это не относиться к OLTP, т.е. к хранению данных, а относиться к аналитике.
...
Рейтинг: 0 / 0
25.04.2014, 11:26
    #38625532
DirksDR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД для последующего статистического анализа
zhu,

Что значит - неудобно? Медленно?
"только выбранные ХЭ" означает, что других ХЭ в К быть не должно?
Приведите пример запроса.
...
Рейтинг: 0 / 0
25.04.2014, 15:59
    #38625932
zhu
zhu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД для последующего статистического анализа
DirksDR,

автор"только выбранные ХЭ" означает, что других ХЭ в К быть не должно?
да

неудобство в том что нужно делать очень много подзапросов

это лишь кусочек БД и на самом деле в таблицу с ЭД тянутся еще 2 ветки с такой структурой( ХЭ-СК-К---ЭД)

задача: найти эксперименты кислород + водород и концентрации этих ХЭ. и представить их в виде удобном для анализа.

хотелось бы чтобы в результат возвращалась такая таблица:
...
Рейтинг: 0 / 0
25.04.2014, 18:09
    #38626134
zhu
zhu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД для последующего статистического анализа
DirksDR,

мой запрос выглядит так
//с-концентрация

select id,b.с1,b.с2, v
from
(select id_k, sum(if(id_XЭ=1,с,null)) AS с1, sum(if(id_XЭ=2,с,null)) AS с2
from СК where id_k
in (select id_k from СК where id_k in ( select id_k from СК
where id_XЭ in ( 1)) and id_k in ( select id_k from СК
where id_XЭ in ( 2)) and id_k not in ( select id_k from СК
where id_XЭ not in ( 1,2)))
group by id_k) as b, ед
where ед.id_k=b.id_k
...
Рейтинг: 0 / 0
26.04.2014, 10:10
    #38626434
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД для последующего статистического анализа
zhu,

1. Я бы немного схему подшаманил (хотя это не принципиально и не обязательно) в части таблицы состав композиции.
2. Если эксперимент - это только одна композиция, то таблица композиция не нужна - она нужна только в том случае, если эксперимент состоит из несольких композиций...
3. Запрос будет примерно таким:
PARAMETERS l1 Long;
SELECT ЭД.[выходной параметр], ЭД.id_K, ХЭ.name, [состав композиции].Концентрация
FROM ХЭ INNER JOIN ((K INNER JOIN [состав композиции] ON K.id = [состав композиции].id_k) INNER JOIN ЭД ON K.id = ЭД.id_K) ON ХЭ.id = [состав композиции].id_ХЭ
WHERE (((ЭД.id_K)=[l1]));
...
Рейтинг: 0 / 0
26.04.2014, 10:17
    #38626436
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД для последующего статистического анализа
zhu,

То что нарисовано выше, можете скачать и посмотреть если у вас стоит офис 2000 или выше в этом варианте рабочий запрос - смотрите (Запрос1), на запрос параметра ответьте - 1 (там для примера одна композиция) этот вариант предполагает что в одном эксперименте может быть более одной композиции,
иначе таблица композиция не нужна...
...
Рейтинг: 0 / 0
27.04.2014, 03:52
    #38626873
zhu
zhu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД для последующего статистического анализа
vmag,
эксперимент - это одна композиция;
таблица композиция лишь для того чтобы не отслеживать номер последней добавленной композиции(при добавлении композиции поле k.id-автоинкримент);

ваш запрос выводит комбинации:
v1 | ХЭ1 | c1
v1 | ХЭ2 | c2

мне для анализа нужно чтобы все что касается одного эксперимента было выведено в строку:

v1 | ХЭ1 | c1 | ХЭ2 | c2

поэтому без преобразования столбцов в строку (select id_k, sum(if(id_XЭ=1,с,null)) AS с1, sum(if(id_XЭ=2,с,null)) AS с2) не обойтись; или парсить массив уже в приложении - что не очень хочется.

возможно есть способ оптимизировать запрос поиска нужных композиций:
//нужно отобрать все композиции которые содержат одновременно только id_ХЭ=1 и id_ХЭ=2

(select id_k from СК where id_k in ( select id_k from СК
where id_XЭ in ( 1)) and id_k in ( select id_k from СК
where id_XЭ in ( 2)) and id_k not in ( select id_k from СК
where id_XЭ not in ( 1,2)))
...
Рейтинг: 0 / 0
27.04.2014, 10:11
    #38626915
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД для последующего статистического анализа
zhu,

Вы просто подошли к тому моменту, когда дальше над таблицами и схемой данных кружить мало эффективно, пора уже переходить к созданию приложения: Делать формы и отчеты...
Но кое что еще выжать можно если в нужные таблицы добавить логические поля Да/Нет для выбора:
1.
zhuмне для анализа нужно чтобы все что касается одного эксперимента было выведено в строку:
v1 | ХЭ1 | c1 | ХЭ2 | c2
Этот кусок проще сделать в функции, которая читает (перебор) все записи в запросе с условием выборки (чек боксы установлены в Да) и собирает значения в текстовую переменную, которую потом и возвращает.
2.
zhuвозможно есть способ оптимизировать запрос поиска нужных композиций:
//нужно отобрать все композиции которые содержат одновременно только id_ХЭ=1 и id_ХЭ=2
Решается таким же способом, отбираются те из ХЭ у которых проставили предварительно Да...
На самом деле за счет доп. полей выбора размер базы немного увеличится, но упростятся рабочие запросы в которых по большому счету будет только одно условие выборки - выбирать помеченное...
А общий алгоритм будет таким:
1. Снять выбор со всех.
2. Пометить нужное.
3. Отобрать помеченное.
Итак в цикле...
...
Рейтинг: 0 / 0
28.04.2014, 15:00
    #38627805
DirksDR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД для последующего статистического анализа
zhuвозможно есть способ оптимизировать запрос поиска нужных композиций:
//нужно отобрать все композиции которые содержат одновременно только id_ХЭ=1 и id_ХЭ=2

(select id_k from СК where id_k in ( select id_k from СК
where id_XЭ in ( 1)) and id_k in ( select id_k from СК
where id_XЭ in ( 2)) and id_k not in ( select id_k from СК
where id_XЭ not in ( 1,2)))
прповерить не на чем, но идея такая
Код: sql
1.
2.
3.
select id_k from СК where id_XЭ=1 s1
inner join ( select id_k from СК where id_XЭ=2) s2 on s1.id_k=s2.id_k
inner join ( select id_k from СК group by id_XЭ having count=2) s3 on s1.id_k=s3.id_k


работает?
...
Рейтинг: 0 / 0
28.04.2014, 15:58
    #38627891
zhu
zhu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД для последующего статистического анализа
DirksDR,
не смогла поправить ваш запрос - MySQL на синтаксис ругается...

но идея как я понимаю в том чтобы:
выбрать все композиции с 2-мя ХЭ, а потом по ним искать нужную.
...
Рейтинг: 0 / 0
29.04.2014, 11:08
    #38628563
DirksDR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД для последующего статистического анализа
zhu,

Код: sql
1.
2.
3.
4.
5.
6.
7.
select id_k 
from СК s1,
(select id_k from СК where id_XЭ=2) s2, 
(select id_k from СК group by id_XЭ having count=2) s3 
where id_XЭ=1
and s1.id_k=s2.id_k
and s1.id_k=s3.id_k


а так?
я не работаю с MySQL и не знаю его диалекта...
...
Рейтинг: 0 / 0
05.05.2014, 09:33
    #38632800
DirksDR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД для последующего статистического анализа
Пожалуй, надо писать

select s1.id_k
from СК s1,
....
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование БД для последующего статистического анализа / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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