У меня много временных рядов, хранящихся в базе данных 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, соответствующий записям