powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите более здравую идею для организации бд
9 сообщений из 9, страница 1 из 1
Подскажите более здравую идею для организации бд
    #39724156
vanlove2die
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть некие "объекты"
Есть значения "датчиков" F0..F9 для этих объектов
Показания датчиков для разных объектов могут соответствовать неким величинам "назначениям" скажем А0..А9 при этом возможны случаи когда А рассчитывается как некая математическая функция от F или от нескольких F.

В итоге имею три таблицы справочник датчиков, справочник назначений и третью таблицу связывающую объект, датчик и назначение.
Вроде бы все хорошо. Но в итоге хочется сделать view где будут уже не F0..F9, а рассчитанные на основании связей величины "назначений". И я не могу придумать ничего лучше чем динамический SQL.
...
Рейтинг: 0 / 0
Подскажите более здравую идею для организации бд
    #39724158
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vanlove2die,

Ну динамический SQL тоже имеет право на жизнь, особенно когда нельзя один запрос оптимизировать для разных жизненных случаев.

Вы обрисовали ситуацию, но не ясно, в чем именно проблема?
...
Рейтинг: 0 / 0
Подскажите более здравую идею для организации бд
    #39724159
vanlove2die
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может быть я плохо описал свою проблему.
Есть таблица

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE TABLE `monitoringtable` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `post_id` int(11) NOT NULL,
  `dateOfMeasurement` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `F0` float NOT NULL,
  `F1` float NOT NULL,
  `F2` float NOT NULL,
  `F3` float NOT NULL,
  `F4` float NOT NULL,
  `F5` float NOT NULL,
  `F6` float NOT NULL,
  `F7` float NOT NULL,
  `F8` float NOT NULL,
  `F9` float NOT NULL,

  PRIMARY KEY (`id`),
) ENGINE=InnoDB;



Она заполняется другой программой.

Мне же интересны уже преобразованные данные, для понимания что есть что есть 3 таблицы

Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE `sensors` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sensor_name` varchar(10) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `sensor_name_UNIQUE` (`sensor_name`)
) ENGINE=InnoDB  COMMENT='Справочник датчиков';



Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE `sensor_placements` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `placement_name` varchar(15) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `placement_name_UNIQUE` (`placement_name`)
) ENGINE=InnoDB  COMMENT='Места расположения датчиков\n';



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE TABLE `sensor_alias` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `placement_id` int(11) NOT NULL COMMENT 'идентификатор местоположения датчика',
  `sensor_id` int(11) NOT NULL COMMENT 'идетификатор датчика',
  `post_id` int(11) NOT NULL COMMENT 'идентификатор поста',
  PRIMARY KEY (`id`),
  UNIQUE KEY `sensor_post_unique` (`sensor_id`,`post_id`),
  KEY `alias_to_post_idx` (`post_id`),
  KEY `alias_to_placement_idx` (`placement_id`),
  KEY `alias_to_sensor_idx` (`sensor_id`),
  CONSTRAINT `alias_to_placement` FOREIGN KEY (`placement_id`) REFERENCES `sensor_placements` (`id`),
  CONSTRAINT `alias_to_post` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`),
  CONSTRAINT `alias_to_sensor` FOREIGN KEY (`sensor_id`) REFERENCES `sensors` (`id`)
) ENGINE=InnoDB  COMMENT='Мапирование датчиков на места';




В итоге я бы хотел в самой базе преобразовать данные от датчиков к местам их расположения. но как это сделать кроме как собирать запрос через Prepare Execure я не придумал. С учетом остальных связей.. выходит грустно. и чем дальше тем грустнее. Делаю через View, который пересоздаю в триггере, когда добавляются/изменяются записи в таблице sensor_alias
...
Рейтинг: 0 / 0
Подскажите более здравую идею для организации бд
    #39724165
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vanlove2dieДелаю через View, который пересоздаю в триггере, когда добавляются/изменяются записи в таблице sensor_aliasХм, насколько я в курсе, в триггерах нельзя создавать VIEW.
Да и нет никакой необходимости пересоздавать VIEW только из-за изменения количества записей.


vanlove2dieВВ итоге я бы хотел в самой базе преобразовать данные от датчиков к местам их расположенияЗвучит слишком просто, чтобы делать из этого проблему:
Код: sql
1.
2.
3.
4.
SELECT *
FROM monitoringtable m
  LEFT JOIN sensor_alias sa ON sa.post_id = m.post_id
  LEFT JOIN sensor_placements sp ON sp.id = sa.placement_id
...
Рейтинг: 0 / 0
Подскажите более здравую идею для организации бд
    #39724167
vanlove2die
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
Если вдаваться глубже,
1 т.к совокупность назначений для постов разная собираем структуру для одного поста потом объединяем с другим и т.д.
2 т.к есть значения порогов для мест установки этот View лезет еще и в эти таблицы для рассчета финальных значений. а там еще анализ на коды отказов. и прочее.
3 нужно в базе считать время следующего опроса относительно предыдущего в зависимости от нахождения значений между порогами..

и все это растет как снежный ком. никакой прозрачности. этот монструм даже работает, но как-то медленно. и я начинаю задумываться об альтернативном подходе.. мб даже таблицу создавать куда бы это все 1 раз пересчитывалось. а не миллион раз при обращении к этому view, но вроде как дублирование данных, да и если справочник placements будет расти, таблицу эту расширять надо, чтоб покрыть все варианты.
...
Рейтинг: 0 / 0
Подскажите более здравую идею для организации бд
    #39724170
vanlove2die
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Звучит слишком просто, чтобы делать из этого проблему:
Код: sql
1.
2.
3.
4.
SELECT *
FROM monitoringtable m
  LEFT JOIN sensor_alias sa ON sa.post_id = m.post_id
  LEFT JOIN sensor_placements sp ON sp.id = sa.placement_id



Я не совсем понимаю как это мне поможет. Оконными функциями потом это сворачивать? Простите , то ли опыта нет, то ли мозгов.

Мне нужно из таблицы data, F0... F9 получить тублицу data, А0..А9
...
Рейтинг: 0 / 0
Подскажите более здравую идею для организации бд
    #39724177
vanlove2die
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

idpost_iddateOfMeasurementF0F1F2F3F4F5F6F7F8F9placement_idsensor_idplacement_name11"2018-09-22 20:38:02"912111111116PhaseA111"2018-09-22 20:38:02"912111111153PhaseA211"2018-09-22 20:38:02"912111111112PhaseA111"2018-09-22 20:38:02"912111111124PhaseB111"2018-09-22 20:38:02"912111111149Ground_wire121"2018-09-22 20:40:36"1112111111116PhaseA121"2018-09-22 20:40:36"1112111111153PhaseA221"2018-09-22 20:40:36"1112111111112PhaseA121"2018-09-22 20:40:36"1112111111124PhaseB121"2018-09-22 20:40:36"1112111111149Ground_wire132"2018-09-22 23:58:00"812111111111PhaseA142"2018-09-22 23:58:12"2912111111111PhaseA151"2018-09-30 21:36:52"1112111111116PhaseA151"2018-09-30 21:36:52"1112111111153PhaseA251"2018-09-30 21:36:52"1112111111112PhaseA151"2018-09-30 21:36:52"1112111111124PhaseB151"2018-09-30 21:36:52"1112111111149Ground_wire1
...
Рейтинг: 0 / 0
Подскажите более здравую идею для организации бд
    #39724244
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vanlove2dieЕсть значения "датчиков" F0..F9 для этих объектовЯ верно понимаю, что а) для каждого объекта существует именно такой набор "датчиков", не больше и не меньше, и измениться он не может в принципе; б) суть этих "датчиков" строго фиксирована и уникальна, и изменение их нумерации (не значений, а именно самих имён-заголовков) недопустимо? Если да, то 10 полей в таблице объектов - это правильно, иначе скорее ошибочно.

vanlove2dieПоказания датчиков для разных объектов могут соответствовать неким величинам "назначениям" скажем А0..А9 при этом возможны случаи когда А рассчитывается как некая математическая функция от F или от нескольких F.Это реализуется или запросом. или, при слишком высокой сложности, пользовательской функцией. В любом случае динамический SQL тут нафиг не нужен.

vanlove2dieя начинаю задумываться об альтернативном подходе.. мб даже таблицу создавать куда бы это все 1 раз пересчитывалось.Если исходные значения для расчёта статичны (фиксируются и в дальнейшем не изменяются) - то предрасчёт есть вполне нормальное и достаточно эффективное решение. Даже если они таки изменяются, но редко - всё равно пересчёт предрасчётных значений может (да и, вероятно, будет) более эффективен, чем постоянный расчёт по актуальным значениям. Особенно когда есть временнОй зазор между изменением и использованием.
...
Рейтинг: 0 / 0
Подскажите более здравую идею для организации бд
    #39724492
vanlove2die
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Akina для каждого объекта существует именно такой набор "датчиков", не больше и не меньше, и измениться он не может в принципе; На данном этапе да.. их 10, но я так подозреваю что их может быть больше в дальнейшем. Суть в том для разных объектов эти датчики могут измерять разные величины, ну например на одном посту F0 меряет вес одного провода на другом другого провода. А ограничения и пороги привязаны к наименованиям провода, а не значению датчика. да и иногда для измерения какого-то веса используется сразу несколько датчиков например A1 = (F0+F2)*0.876, формулы расчета могут быть и сложнее. А я хочу в базе переводить для каждого поста показания датчика к тому что он измеряет.


Akina10 полей в таблице объектов - это правильно, иначе скорее ошибочно.
Есть таблица куда с каким-то интервалом записываются текущие показания со всех датчиков постов.
Мб вас ввела в заблуждение моя табличка, это результат запроса предложенного ранее. Просто я не понял как он мне поможет. и опубликовал результат.


AkinaЭто реализуется или запросом. или, при слишком высокой сложности, пользовательской функцией
Вы можете привести пример запроса каким я получу сколько весит провод который считается как (F1+F2)*0.867 .


Что ж я нормально объясниться то не могу.=( Мне нужно в итоге превратить показания датчиков в то что они меряют при этом схема этого превращения для каждого поста измерений разная.. вернее эта схема задается через табличку sensor_alias и часто несколькими датчиками совместно меряется одна величина по какой-то формуле.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите более здравую идею для организации бд
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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