Проектирование базы данных для сбора данных с несколькими типами переменных

Я спроектирую и внедрю базу данных для сбора данных и начал задумываться о том, что может быть лучшей структурой реляционной базы данных для решения с несколькими переменными. Может быть десятки переменных (настраиваемых), разных типов (булево, целое число, по крайней мере, число с плавающей точкой, возможно, строка). Значения разных переменных не связаны. Мне нужно хранить переменную, новое значение и метку времени. Хранение переменных запускается либо по часам, либо по изменению значения.

Простейшим решением будет одна таблица с переменной FK, новым значением и отметкой времени, но поскольку переменные могут иметь разные типы, тип нового значения вызывает проблемы. Я могу представить несколько возможных решений, все из которых включают отдельную таблицу для определения переменной и одну или несколько таблиц для временных рядов, по одной записи для каждой переменной-значения-времени:

  1. Есть какой-то общий тип данных, который может хранить все значения (строка?)
  2. Иметь несколько столбцов, по одному для каждого типа
  3. Иметь несколько таблиц для значений данных, по одной таблице для каждого типа

Что-то другое?

В основном я ищу хороший "шаблон дизайна базы данных".

2 ответа

Решение

Накладные расходы на вызов базы данных перекрывают любые накладные расходы на синтаксический анализ числа / логического значения в строке. Возможно, вы захотите добавить столбец для типа (1 = Int, 2 = Dbl, 3 = String, 4 = Bool, 5 = date и т. Д.), Чтобы ваш код мог выбрать правильное действие для выполнения закодированного в строке значения в база данных. Что-то вроде (от макушки головы):

create table foo_values (
  -- optional fkey to select which foo this key/value belongs to
  foo_uid number(18,0) not null enable,
  key nvarchar2(64) not null enable,
  -- could be a fkey to a table of types, or an enum, etc, 
  -- depending on database support  
  datatype number(2) not null enable, 
  value nvarchar(256)
  created timestamp default systimestamp not null enable,

  -- Foreign key and index stuff here, etc ...
)

Попробуйте модель EAV (Entity-Attribute-Value).

Другие вопросы по тегам