SQL таблица со столбцом, который может иметь значения «несколько типов NULL» - PullRequest
0 голосов
/ 24 февраля 2020

Название может вводить в заблуждение, поэтому мне нужно уточнить.

У меня есть следующий набор данных опроса, который мне нужно перенести в базу данных 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, «нулевые» значения будут просто отрицательным числом, которое будет проблематичным c в следующих манипуляциях с данными.

1 Ответ

2 голосов
/ 24 февраля 2020

Я думаю, что лучшим вариантом здесь было бы просто добавить столбцы состояния для каждого столбца данных, предполагая, что вы хотите отслеживать состояние для данного столбца. Примерно так:

| id | title | income | age    | age_code | height | height_code | weight | Education   |
| 1  | foo   | 10000  | 45     | 1        | 170    | 1           | 50     | College     |
| 2  | bar   | 15000  | NULL   | 2        | NULL   | 4           | 45     | High School |
| 3  | hoge  | NULL   | NULL   | 3        | 150    | 1           | 60     | NULL        |
| 4  | fuga  | 20000  | 20     | 1        | NULL   | 5           | 70     | College     |

Здесь я использую значения кода 2,3 для представления некоторого вида кода ошибки в возрасте, а значения 4,5 представляют другие типы ошибок с высотой.

Обычно значения в столбце должны представлять только одну вещь. В этом случае столбцы возраста и роста должны хранить данные для этих измерений, а не статус этих измерений. Я заполнил NULL значения для тех случаев, когда данные отсутствуют или иным образом полностью недействительны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...