powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / null vs пустая строка
6 сообщений из 6, страница 1 из 1
null vs пустая строка
    #40101931
delphinotes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ораклисты привыкли, что это эквивалент. В целом, отделять в прикладном коде одно от другого мне не приходилось (ну за исключением случаев, когда требуется сделать "хитрый" поиск, в Oracle я просто вместо пустой строки пишу chr(0)).
Вобщем, мне хочется все текстовые поля в таблицах объявить как not null (и, возможно, default '' ).

Стоит ли так делать? Или не стоит?
В принципе, можно и наоборот, запретить вставлять пустые строки (check constraint <>''), заменяя их на null на клиенте.

Вопрос не о том, как работать с null и '' в ПГ. Вопрос о том, что лучше с точки зрения производительности, может грабли какие есть.
...
Рейтинг: 0 / 0
null vs пустая строка
    #40101935
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphinotes
Ораклисты привыкли, что это эквивалент. В целом, отделять в прикладном коде одно от другого мне не приходилось (ну за исключением случаев, когда требуется сделать "хитрый" поиск, в Oracle я просто вместо пустой строки пишу chr(0)).
Вобщем, мне хочется все текстовые поля в таблицах объявить как not null (и, возможно, default '' ).

Стоит ли так делать? Или не стоит?
В принципе, можно и наоборот, запретить вставлять пустые строки (check constraint <>''), заменяя их на null на клиенте.

Вопрос не о том, как работать с null и '' в ПГ. Вопрос о том, что лучше с точки зрения производительности, может грабли какие есть.


ну с т.з. производительности null занимает от 0 до 1бита а varchar '' 2 байта...
с точки зрения семантики есть разница между '' и NULL как правило... 1)известно что значение пустое 2)значение неизвестно.

PS: можно очень больно попасть на JOIN в случае если вместо NULL использовать ''
так как ''='' = true а вот NULL=NULL is NULL = false
и соединение по пустым строкам будет давать результат а по NULL нет.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
null vs пустая строка
    #40101954
delphinotes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

Спасибо. Да про джойны понятно. Скажем, всегда (ну или не всегда, по ситуации) писать coalesce, либо nullif - не проблема. Просто для единобразия хочется запретить либо одно, либо другое, и тут я особой разницы что запрещать я пока не вижу.

Про 0/1 бит - это я так понимаю в битовом поле из заголовка записи. Если поле объявлено как not null, то и бит этот не проверяется (и даже не выделяется), так ведь? Здесь мне кажется, что пустые строки будут работать быстрее в целом.
С другой стороны, необязательные по смыслу поля действительно будут хранить 2 байта всегда... но ведь внутри записи есть выравнивания и... тут наверное всё же надо какие-то конкретные примеры смотреть. Порядок столбцов и всё такое.
Ну и ещё как это на индексах скажется. И я пока не понимаю, как там TOAST работает на практике (но это уже для длинных строк).

Видимо, всё-таки, придётся самому какие-то тесты делать, я надеялся, что кто-то их уже проводил.
...
Рейтинг: 0 / 0
null vs пустая строка
    #40102004
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
delphinotes,

Самый простой пример - что будете делать если понадобиться навесить на поле unique ограничение?
Из своего опыта скажу, что лучше разрешать null, нежели везде пихать ''
...
Рейтинг: 0 / 0
null vs пустая строка
    #40102898
delphinotes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
demon1992,

Дельное замечание, спасибо. Конечно, можно написать nullif(column, ''), но это будет путать.


"Покрутил" юзкейсы. В целом, с точки зрения читабельности/переносимости и поддержки в будущем, действительно лучше оставить null, а пустую строку запретить констрейнтом (+ у меня над таблицами будет прослойка вьюх с instead-of триггерами, буду лучше там приводить '' к null).
...
Рейтинг: 0 / 0
null vs пустая строка
    #40103050
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphinotes
В целом, с точки зрения читабельности/переносимости и поддержки в будущем, действительно лучше оставить null, а пустую строку запретить констрейнтом

Обычно делают как раз наоборот. Да и старик Дейт на NULL ругался как на беса.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / null vs пустая строка
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]