2013-10-15 3 views
0

Это вопрос наилучшей практики на самом деле.
Я разрабатываю систему, где я буду собирать некоторые измерения (назовите их HR и RR) и вычислить средние значения этих измерений. Теперь для пользовательского интерфейса нас интересуют только эти средние значения, но для более глубокого анализа данных нам понадобятся все индивидуальные измерения (для экспорта в Matlab), а также все средние вычисления (не спрашивайте - пользователь я бы просто сохранил отдельные измерения и вычислил среднее значение позже, если это необходимо).Столы одинаковые структуры и аналогичные данные

Подробнее о средних расчетах и ​​т. Д .:
- HR: мы получаем показания каждые 500 - 1500 мс (переменная). Мы вычисляем среднее значение, основанное на 4-12 показаниях (в зависимости от времени между показаниями).
- RR: мы получаем показания каждые 3-17 секунд (переменная). Мы вычисляем среднее значение на основе 2-3 показаний (в зависимости от времени между показаниями).

И для сохранения:
- Среднее значение (десятичное) вместе с отметкой времени первого чтения из показаний, используемых для среднего расчета.
- Каждое отдельное чтение (десятичное) вместе с отметками времени, когда было выполнено чтение.

Как вы можете видеть, данные одинаковы для средних вычислений и отдельных показаний. То же самое с HR/RR - эти данные те же самые и могут быть представлены следующим образом:
- - - - - - - - -
|               |
- - - - - - - - - -
|   Timestamp   |
|   Значение                     |

Поскольку мы вычисляем данные с разными временными интервалами и т. Д., Мы не можем хранить HR + RR как одну строку в базе данных, нам нужны отдельные строки или таблицы.
Вопросы:
1. Лучше ли практика создания отдельных таблиц для HR и RR? Или лучше хранить их в той же таблице, что и отдельные строки, с столбцом, указывающим, соответствует ли данная строка HR или RR?
2. Лучше ли создавать отдельные таблицы для каждого отдельного показания? Или лучше создать таблицу саморегуляции, где каждое отдельное чтение будет ссылаться на строку в той же таблице со средним расчетом, в котором она использовалась?

Я не настолько хорош с дизайном БД, и я не уверен, какие лучшие практики используются в этой ситуации.
Я также рассматривал возможность использования MongoDB (а не базы данных SQL - возможно, MSSQL, поскольку проект основан на C#), что, вероятно, облегчило бы жизнь, поскольку я мог бы иметь массив отдельных измерений, встроенных в документ со средним расчетом и т. Д. как я знаю, пишет Mongo очень быстро ...

Любые указатели? Благодарю.

ответ

1

Как и в случае с ним, как будто это звучит, это зависит. К вашему первому вопросу можно было бы вполне законно взглянуть на это как на таблицу показаний или на две более конкретные таблицы.Тем не менее, много лет назад я бы сказал один стол, но с годами тяготел к двум столам. Во-первых, ваши ключевые значения становятся более конкретными - (Чтение) против (Чтение + Тип). И в противном случае вы обнаружите, что добавляете «AND ReadType = ...» во сне. Это также оставляет вам большую гибкость, когда кто-то решает, что одно чтение должно быть с другой точностью или же сохранить цвет рубашки, которую носил техник.

Во втором вопросе, опять же, мнения будут меняться, но я склоняюсь к родительской таблице считывающих наборов и деталям отдельных чтений. Стол самореференции чувствует, что он выигрывает некоторые очки стиля, но присоединение к себе может стать сложным в зависимости от ответов, которые вы пытаетесь получить. Кроме того, ваш окончательный выбор платформы БД может включать или не включать некоторые из специализированных опций, таких как CTE MSSQL, которые затрагивают некоторые из этих сложностей.

В целом, вы, вероятно, может иметь:

  • ReadingSet (ReadingSetID [, другая информация по необходимости])
  • ReadingR (ReadingRID, ReadingSetID, Value, TimeStamp)
  • ReadingH (ReadingHID, ReadingSetID, Value, TimeStamp)
+0

Я думаю, что ваши аргументы имеют смысл, это именно то, о чем я думал. Благодарю. –

Смежные вопросы