тип поля строки базы данных: должно ли оно быть обнуляемым? - PullRequest
1 голос
/ 27 января 2012

У меня есть несколько таблиц, которые содержат несколько строк для полей. Некоторые из этих полей могут содержать или не всегда содержать данные. Если я создаю запись со строковым полем, которое является нулевым во время создания записи, становится ли это проблемой, когда я выполняю запрос на чтение этой записи, потому что поле является нулевым или запрос возвращает пустую строку? Что считается основанным? Ненулевые строки или строки, которые можно обнулить, и когда узнать разницу?

Спасибо за ваши предложения.

Ответы [ 3 ]

1 голос
/ 27 января 2012

Это обсуждалось снова и снова миллион раз. Однако, на мой взгляд, значения NULL существуют по какой-то причине, и вам следует держаться подальше от «магических» значений (даже пустая строка что-то значит, не так ли).

Значения NULL НЕ конвертируются во что-либо во время чтения. Вы получите ноль. Вы должны интерпретировать это как «это значение не было установлено» и относиться к нему таким образом. Если вы замените его каким-либо магическим значением (например, пустой строкой), вы просто ищете проблему, поскольку рано или поздно это магическое значение начнет иметь значение чего-то другого, и вы не будете знать, как отличить его от этих которые никогда не были установлены.

Другими словами, если вы считаете, что свойство является необязательным , то оно определенно является кандидатом на обнуляемость. Всякий раз, когда вы начинаете обсуждать это с собой, помните слово «по желанию», и я уверен, что вы примете правильное решение.

1 голос
/ 27 января 2012

На сайте обмена стеками для администраторов баз данных есть аналогичный вопрос .Они в значительной степени повторяют сказанное здесь.

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

1 голос
/ 27 января 2012

Запрос вернет пустую строку, если она хранится в базе данных, и нулевое значение (System.DBNull), если это пустая строка с нулем в ней.

Однако решение должно основываться на данных, которые вы моделируете, а не на функциональности запросов.

Нуль в БД обычно означает, что значение либо неизвестно, либо оставлено пустым. Это может отличаться от пустой строки, которая может использоваться, чтобы означать, что нет значения.

Возьмите, например, поле MiddleName. Возможно, вы захотите провести различие между кем-то без второго имени (пустая строка) и тем, кто еще не ввел его (Нуль). В этом случае вам понадобится пустое строковое поле.

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