我在多个表中的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