#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 * стандартного отклонения, мне нужно сохранить отклонение. Для каждой таблицы также необходимо будет создать представление?