Russian Qt Forum
Март 28, 2024, 20:03
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Базы данных
>
Структура бд
Страниц: [
1
]
2
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Структура бд (Прочитано 13862 раз)
ammaximus
Гость
Структура бд
«
:
Июль 29, 2014, 20:10 »
Задача такая в таблице основной параметр время, этот столбец всегда есть, он используется как уникальный ид.
Во время работы приходят пачки вида (время,название параметра,значение параметра). Если время совпадает - это одна строка. Нужно все это накапливать, а впоследствии делать запросы, получая простую таблицу где первый столбец время, а остальные те которые приходили. Также должно быть можно получить заголовки этих самых названий параметров. У меня получилась реализация с использованием alter table add column, но мне кажется это что то не то. Сейчас думаю в сторону двойного ключа, где первый столбец время, второй название параметра, а далее уже значения. Тут непонятно как сделать из этого выборку, придется много раз запрашивать.
Попробовал контейнеры, получилось treemap(time,hashmap<name,value>) + отдельный массив уникальных name.
1. Как сделать бд
2. Как сделать контейнерами
P.s. sqlite
«
Последнее редактирование: Июль 29, 2014, 20:12 от ammaximus
»
Записан
кып
Гость
Re: Структура бд
«
Ответ #1 :
Июль 31, 2014, 15:25 »
Не совсем понял, но посмотрите EAV модель данных.
Записан
ammaximus
Гость
Re: Структура бд
«
Ответ #2 :
Август 01, 2014, 19:20 »
Возможно плохо объяснил, разрешите попробовать снова.
Допустим в доме есть контроллер климата. К нему может быть подключены разные термометры, барометры, и т.д. Изначально база имеет вид
Код:
Время
В определенный момент времени издается сигнал на выполнение измерений - поскольку все датчики работают асинхронно они ответят в разное время, но ответ в пределах одной минуты для меня считается одновременным, поэтому я заранее сохраняю время выдачи сигнала и подставляю его.
Мне приходит ответ в такой форме
Код:
Термометр, 36.6
, я добавляю время, получается
Код:
10:43, Термометр, 36.6
БД должна быть хранить следующее:
Код:
Время Термометр
10:43 36.6
Проблема следующая - до выдачи сигнала мне неизвестно включен ли сейчас термометр, а также вообще что включено и т.д. Пользователь имеет право в любой момент добавить новое устройство, но в бд данные должны попадать только с того момента, как устройство прислало ответ. Необходима возможность удалять строки, более того если в столбце нет ни одного значения (все null) столбец более не нужен. Запросы к таблице должны возвращать мне такую выборку:
Код:
Время Термометр Барометр
10:43 36.6 null
10:48 36.7 180
Как то не довелось работать с БД ранее, вопрос вроде должен быть простой, из разряда как правильно организовать связь таблиц и запрашивать к ним. Я пока сделал в лоб - с помощью одной таблицы и ALTER TABLE ADD COLUMN. Но мне кажется, что можно как то сделать через связанные таблицы.
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Структура бд
«
Ответ #3 :
Август 04, 2014, 07:26 »
А как тебе такой вариант:
Time
Device
Value
10:43
barometer
100
10:48
thermometer
180
10:48
barometer
120
«
Последнее редактирование: Август 04, 2014, 07:28 от Пантер
»
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ammaximus
Гость
Re: Структура бд
«
Ответ #4 :
Август 04, 2014, 11:26 »
Думал об этом, а как сделать запрос к этой таблице, чтобы получить результат в той форме как я писал и не будет ли это слишком долго?
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Структура бд
«
Ответ #5 :
Август 04, 2014, 11:37 »
Про результат немного не понял - повтори.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ammaximus
Гость
Re: Структура бд
«
Ответ #6 :
Август 04, 2014, 12:06 »
Цитата: ammaximus от Август 01, 2014, 19:20
Запросы к таблице должны возвращать мне такую выборку:
Код:
Время Термометр Барометр
10:43 36.6 null
10:48 36.7 180
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Структура бд
«
Ответ #7 :
Август 04, 2014, 12:08 »
А зачем выборка такого плана? Объясни ее суть.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Структура бд
«
Ответ #8 :
Август 04, 2014, 12:16 »
Я не силён в БД, но обычный group by, разве не подойдёт?
Записан
Bepec
Гость
Re: Структура бд
«
Ответ #9 :
Август 04, 2014, 12:17 »
Ну если со стороны быстро взглянуть - вам просто 2 таблицы нужны. Барометра и Термометра.
Код:
Таблица baro
time Value.
Таблица termo
Time Value.
А потом делать выборку типа такой
Псевдокод!!!
Код:
Select baro.Time, baro.Value, termo.Value from baro, termo where baro.time = termp.time;
Тут не учитывается вариант что данные об одном времени отсутствуют в одной из таблиц. Но это я не помню как по условиям ставится :/
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Структура бд
«
Ответ #10 :
Август 04, 2014, 12:21 »
Bepec, не канает, у него могут подключаться новые девайсы.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bepec
Гость
Re: Структура бд
«
Ответ #11 :
Август 04, 2014, 12:26 »
Не канает по причине что параметров может быть больше 2 и запрос придётся менять. Но универсализма тут мы не добьёмся на мой взгляд.
Сделать по таблице на каждый вид параметра и потом поступить как предлагает __Heaven__ - а именно
Код:
select * from baro, termo, hermo group by time
PS ххы, а ведь и получается универсализм. Если бд позволяет получить список таблиц, запрос мы можем сформировать динамически и в результате по идее получаем нужную нам выборку из N таблиц/параметров.
Записан
ammaximus
Гость
Re: Структура бд
«
Ответ #12 :
Август 04, 2014, 12:26 »
Цитата: Пантер от Август 04, 2014, 12:08
А зачем выборка такого плана? Объясни ее суть.
Эти данные я планирую записать в файл формата csv.
Цитировать
Я не силён в БД, но обычный group by, разве не подойдёт?
Может и так, но у меня не получилось.
Цитировать
Ну если со стороны быстро взглянуть - вам просто 2 таблицы нужны. Барометра и Термометра.
Понадобится N таблиц, т.к. девайсов может быть много. Решение с созданием таблиц ничем не лучше alter table.
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Структура бд
«
Ответ #13 :
Август 04, 2014, 12:31 »
Если устройства могут добавляться, то:
1) сначала базу можно опросить на уникальность устройств
2) Сделать запрос для каждого устройства, при этом в заголовке колонки можно записать его имя
3) Объединить таблицы по колонке время.
2 и 3 имею в виду, что нужно написать в одном запросе
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Структура бд
«
Ответ #14 :
Август 04, 2014, 12:32 »
Получить список таблиц - костыльно.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [
1
]
2
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...