SQL модель базы данных для физических величин (таблица на источник данных) - PullRequest
2 голосов
/ 22 января 2020

Мы проводим измерения физических величин и используем базу данных (MSSQLSERVER2014) для анализа данных. Данные считываются из файлов (двоичных / текстовых) в нашу базу данных.

В настоящее время у нас есть следующая структура данных для таблицы данных:

  • DataID (PK, Bigint)
  • FileID (FK, int)
  • ParameterID (FK, int)
  • UnitID (FK, smallint)
  • Время (дата-время)
  • Значение (действительное)

Эта таблица становится большой (> 1.000.000.000 строк), но большинство операторов SELECT выполняются в течение приемлемого времени.

При анализе файла или файла группа файлов сделана, мы удаляем данные, чтобы предотвратить засорение базы данных. Поскольку мы сохраняем исходные файлы, мы всегда можем получить данные обратно. Удаление этих строк занимает много времени (> 1 дня не является необычным) с помощью «УДАЛИТЬ ИЗ [ДАННЫХ] ГДЕ [FileID] IN (...)». Я не пробовал выполнить копирование данных, которые мы хотим сохранить, во временную таблицу, обрезать таблицу [Data] и восстановить данные из временной таблицы, потому что она кажется неправильной.

Чтобы повысить производительность как с DELETE, так и, возможно, также с инструкциями SELECT, я думал о создании таблицы для каждого файла вместо того, чтобы сваливать все данные в одну большую таблицу. Этот новый набор таблиц может иметь такой дизайн:

  • DataID (PK, Bigint)
  • ParameterID (FK, int)
  • UnitID (FK, smallint)
  • Время (дата / время)
  • Значение (реальное)

TableName может храниться в нашей таблице, которая отслеживает все файлы. Чтобы удалить данные из файла, мы можем затем УДАЛИТЬ таблицу.

Это хорошая практика для этой ситуации или есть другие (лучшие) методы?

Поскольку мы также используем EntityFramework для отображения база данных для объектов этих таблиц «dynamici c» усложнит ситуацию, но заставить ее работать не исключено.

Другие варианты, возможно, вообще отбросить SQL и использовать (нет SQL) альтернатива?

...