Цитата |
---|
Sergey_P пишет:
Цитата |
---|
two_oceans пишет: В то, что не было варианта поставить значение "не установлено" тоже слабо верится - большинство баз данных (правда про postgres не уверен) поддерживает значение null, которое как раз и имеет смысл "значение поля не установлено". Конечно с ним тоже есть множество неудобств при работе, но это основы построения баз данных. |
а разве в булеоновских переменных нулл не выдает в итоге ложь на выходе? |
Смотря как проверять. Если точнее, то переменная из базы данных не может быть чистой булевой (чисто строковой и т.д.), она всегда Variant с подтипом булевый (строковый и т.д.), а variant может содержать null (этакий нежданчик). В структуре таблицы базы данных можно запретить для поля возможность содержать null, то есть сделать осмысленное значение обязательным. Так обычно и делают. Когда мы точно знаем, что не получим null мы можем эгоистично использовать обычные типы и не беспокоиться о преобразовании - среда программирования позаботится за нас. А вот есть null не запрещено, то все сводится к тому как именно мы преобразуем variant к обычному типу.
В PHP (и Javascript), например, оператор сравнения == выдаст равенство значений переменных null и ложи и пустой строке и нолю и пустому объекту, однако оператор === уже скажет что типы разные и потому значения не тождественно равны, отличит ложь и null. В Бэйсике есть специальная функция IsNull(проверяемая_переменная). Аналогично в большинстве других языков отличить значения возможно, но при написании программы нужно учитывать возможность, что переменная, полученная из базы данных, может оказаться со значением null и использовать "несколько нестандартные" функции/операторы. Именно это я и имею ввиду под "неудобствами в работе" часть 1.
В базах данных же в запросах sql есть отдельное условие [имя_таблицы].[имя_поля] is null либо [имя_таблицы].[имя_поля] is not null которое позволяет напрямую отобрать только записи, где поле с неустановленными значениями либо с установленными значениями соответственно. Если такого условия не использовать, то, например, в запросе на выборку объединение таблиц по полю содержащему значения null, может выбрать не все результаты или наоборот выбрать одно и то же несколько раз. Это тоже "неудобства в работе" часть 2.