【发布时间】:2023-03-23 22:02:01
【问题描述】:
标题可能有点混乱,所以我需要澄清一下。
我有以下调查数据集,需要传输到 PostgreSQL 数据库。
| id | title | income | age | height | weight | Education |
| 1 | foo | 10000 | 45 | 170 | 50 | College |
| 2 | bar | 15000 | -20000 | -30000 | 45 | High School |
| 3 | hoge | -10000 | -10000 | 150 | 60 | -20000 |
| 4 | fuga | 20000 | 20 | -10000 | 70 | College |
...
其中-10000、-20000、-30000都代表空值,但原因不同。
(例如,-10000 表示未向参与者显示有关该列的问题,-20000 表示参与者跳过问题,-30000 表示他们回答无效。)
问题是,如何设计表和约束来模拟这种情况?
显然,如果我将 INTEGER 用于收入和其他列,并将 VARCHAR 用于教育,则空值将不相同。此外,如果我将收入视为单纯的 INTEGER,则“null”值将只是一个负数,这将在以下数据操作中出现问题。
【问题讨论】:
-
对于这些特定的负值仅使用
NULL有什么问题? -
我需要在进一步的数据分析中区分“为什么值为null”。
-
对于记录高度值为
-30000的人,这代表什么,以及高度的原始值是多少? -
表示参与者输入了无效值(例如-200)。我没有原始值。
-
@kemakino 。 . .问题实际上是您将如何使用数据。您很可能希望用户定义的类型或实体属性值模型来表示这一点。
标签: sql postgresql database-design