Работа с нулевыми значениями по сравнению с пустыми строками в базе данных, когда только пустые строки приходят от клиента через HTTP POST - PullRequest
1 голос
/ 09 октября 2010

Моя база данных MySQL имеет тщательно определенные поля.Некоторые поля, если есть вероятность, что они могут быть неизвестны, допускают значение NULL.

Я пишу веб-CMS для обработки данных в указанной базе данных.Очевидно, что массивы записей из форм HTML никогда не содержат нулевых значений, только пустые строки.

Я не хочу путать пользователей моей CMS, добавив «NULL checkbox» или что-то в этом роде, но я не могу сказать из массивов post, должно ли поле быть пустым или пустым.

Должен ли я преобразовывать все пустые строки в значения NULL при сохранении для полей, которые допускают нулевые значения?

Каковы некоторые хорошие практики для этого типа головоломки?

Ответы [ 2 ]

2 голосов
/ 09 октября 2010

Это липкий вопрос.Конечно, у пользователя нет возможности узнать, хочет ли он вставить пустую строку или вообще ничего.Таким образом, ответ действительно зависит от вас.Вы хотите, чтобы пользователи могли вводить пустые строки?Имеет ли это какое-то значение для этого?Если пустая строка означает что-то, чего нет в строке NULL, и это хорошо определено, продолжайте и разрешите оба варианта.

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

Примите решение сейчас, задокументируйте его и придерживайтесь.

1 голос
/ 09 октября 2010

Вы действительно хотите иметь дело с действительной собственно NULL, с ее хитрой трехзначной логикой ?

По моему опыту, вы редко действительно хотите явную неопределенность, которая приходит с NULL.Хранение пустой строки для значений, которые пользователь не хочет заполнять, обычно более практично.Затем вы можете продолжить поиск типа WHERE t.field<>'x' или WHERE t0.field=t1.field, не беспокоясь о том, что это делает с вашей логической логикой, когда один или оба значения равны нулю.

Если у вас уже есть рабочая база данныхэто зависит от неопределенной природы нуля, и это является неотъемлемой частью ваших требований, тогда хорошо, придерживайтесь нуля (и в этом случае вам, вероятно, придется преобразовать пустой пользовательский ввод в пустое поле в ноль только потому, чтопользователь когда-либо сможет понять концептуальную разницу между ничем и нулем).

Но лично я все еще использую нули только для необязательных ссылок на внешние ключи (когда не используется отдельная таблица соединения).

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