【发布时间】:2021-07-29 20:25:03
【问题描述】:
我必须为数据库设计一个宽表(timescaleDB,它将根据日期创建超表),但似乎没有可能的主键,即使我们正在谈论复合键。
| id | attribute1 | attribute2 | attribute3 | attribute4 | date_time
| ---| ---------- | ---------- | ---------- | ---------- | -------------------
| P1 | A | 20 | NULL | NULL | 2021-01-01 00:00:00
| P1 | B | 10 | NULL | NULL | 2021-01-01 00:00:00
| P1 | NULL | NULL | 200 | 300 | 2021-01-01 00:00:00
| P2 | C | 25 | NULL | NULL | 2021-01-01 00:00:00
| P2 | NULL | NULL | 150 | 400 | 2021-01-01 00:00:00
问题是我们正在抓取描述 P1、P2 等整体的数据,并且仅描述 P1 的一部分(A 和 B 是 P1 的一部分)P2 (C) 等。 ..
有什么方法可以在不拆分表格的情况下完成这项工作?
【问题讨论】:
-
添加一个作为唯一键的自增列或由序列驱动的列怎么样?
-
让我印象深刻的是
NULL中的attribute1隐含 意味着什么?或者P1可以有多行(对于相同的日期时间),其中attribute1是NULL? (如果NULL隐含意味着什么,请改用显式值,然后在键中使用该列) -
另外,你为什么反对有两张桌子?一个当
attribute1是NULL时,一个当它不是?当attribute1是NULL(反之亦然) 时,某些列总是NULL,这表明您正在将两个表组合在一起,这违反了正常的数据库设计实践。 . -
Attribute1 和 Attribute2 对于 P1 将始终为 NULL,它们描述的是 A 和 B(它们属于 P1)。类似地,如果存在 A、B、C 等,attirubtes 和 attribute4 将始终为 NULL,因为这些属性正在描述 P1。就我个人而言,我也会选择单独的表格,只是周围有些人很难说服:)
标签: sql database-design