Ссылки на несколько таблиц в PostgreSQL - PullRequest
0 голосов
/ 28 марта 2019

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

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

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

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

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

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, соответствующий записям

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...