Ссылки на несколько таблиц в PostgreSQL

#postgresql #database-design

#postgresql #база данных-дизайн

Вопрос:

У меня есть много временных рядов, хранящихся в базе данных PostgreSQL по нескольким таблицам. Я хотел бы создать таблицу «аномалии», которая ссылается на временные ряды с особым поведением, например, с исключительно высоким значением.

Мой вопрос заключается в следующем: каков наилучший способ связать записи «аномалий» с другими таблицами?

Я мог бы создать внешний ключ в каждой таблице, ссылающийся на запись в anomaly, но тогда было бы не так очевидно перейти от аномалии к записи, ссылающейся на аномалию.

Другая возможность, которую я вижу, — сохранить имя соответствующей таблицы в записях аномалий, но это не кажется хорошей идеей, поскольку имя таблицы может измениться, или таблица может быть удалена.

Есть ли более элегантное решение для этого?

 CREATE TABLE type_1(
  type_1_id SERIAL PRIMARY KEY,
  type_1_name TEXT NOT NULL,
  unique(type_1_name)
)
CREATE TABLE type_1_ts(
  date DATE NOT NULL,
  value REAL NOT NULL,
  type_1_id INTEGER REFERENCES type_1(type_1_id) NOT NULL,
  PRIMARY KEY(type_1_id, date)
)
CREATE TABLE type_2(
  type_2_id SERIAL PRIMARY KEY,
  type_2_name TEXT NOT NULL,
  unique(type_2_name)
)
CREATE TABLE type_2_ts(
  date DATE NOT NULL,
  value REAL NOT NULL,
  state INTEGER NOT NULL,
  type_2_id INTEGER REFERENCES type_2(type_2_id) NOT NULL,
  PRIMARY KEY(type_2_id, date)
)
CREATE TABLE anomalies(
  anomaly_id SERIAL PRIMARY_KEY,
  date DATE NOT NULL,
  property TEXT NOT NULL,
  value REAL NOT NULL,
  -- reference to a table_name and an entry id?
  table_name TEXT
  data_id INEGER
)
  

Что я хотел бы сделать в конце, так это иметь возможность делать:

 SELECT * FROM ANOMALIES WHERE table_name='type_1',
  

или просто укажите data_type, соответствующий записям

Комментарии:

1. Почему бы просто не создать представление вместо этого?

2. Мне также нужно было бы добавить свойства аномалий. Например, если значение отклоняется от более чем n * стандартного отклонения, мне нужно сохранить отклонение. Для каждой таблицы также необходимо будет создать представление?