对PostgreSQL中多个表的引用

时间:2019-03-28 09:38:14

标签: postgresql database-design

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

0 个答案:

没有答案