|
null vs пустая строка
|
|||
---|---|---|---|
#18+
Ораклисты привыкли, что это эквивалент. В целом, отделять в прикладном коде одно от другого мне не приходилось (ну за исключением случаев, когда требуется сделать "хитрый" поиск, в Oracle я просто вместо пустой строки пишу chr(0)). Вобщем, мне хочется все текстовые поля в таблицах объявить как not null (и, возможно, default '' ). Стоит ли так делать? Или не стоит? В принципе, можно и наоборот, запретить вставлять пустые строки (check constraint <>''), заменяя их на null на клиенте. Вопрос не о том, как работать с null и '' в ПГ. Вопрос о том, что лучше с точки зрения производительности, может грабли какие есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 21:23 |
|
null vs пустая строка
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 21:49 |
|
null vs пустая строка
|
|||
---|---|---|---|
#18+
Maxim Boguk, Спасибо. Да про джойны понятно. Скажем, всегда (ну или не всегда, по ситуации) писать coalesce, либо nullif - не проблема. Просто для единобразия хочется запретить либо одно, либо другое, и тут я особой разницы что запрещать я пока не вижу. Про 0/1 бит - это я так понимаю в битовом поле из заголовка записи. Если поле объявлено как not null, то и бит этот не проверяется (и даже не выделяется), так ведь? Здесь мне кажется, что пустые строки будут работать быстрее в целом. С другой стороны, необязательные по смыслу поля действительно будут хранить 2 байта всегда... но ведь внутри записи есть выравнивания и... тут наверное всё же надо какие-то конкретные примеры смотреть. Порядок столбцов и всё такое. Ну и ещё как это на индексах скажется. И я пока не понимаю, как там TOAST работает на практике (но это уже для длинных строк). Видимо, всё-таки, придётся самому какие-то тесты делать, я надеялся, что кто-то их уже проводил. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 22:57 |
|
null vs пустая строка
|
|||
---|---|---|---|
#18+
delphinotes, Самый простой пример - что будете делать если понадобиться навесить на поле unique ограничение? Из своего опыта скажу, что лучше разрешать null, нежели везде пихать '' ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 10:29 |
|
null vs пустая строка
|
|||
---|---|---|---|
#18+
demon1992, Дельное замечание, спасибо. Конечно, можно написать nullif(column, ''), но это будет путать. "Покрутил" юзкейсы. В целом, с точки зрения читабельности/переносимости и поддержки в будущем, действительно лучше оставить null, а пустую строку запретить констрейнтом (+ у меня над таблицами будет прослойка вьюх с instead-of триггерами, буду лучше там приводить '' к null). ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2021, 21:27 |
|
null vs пустая строка
|
|||
---|---|---|---|
#18+
delphinotes В целом, с точки зрения читабельности/переносимости и поддержки в будущем, действительно лучше оставить null, а пустую строку запретить констрейнтом Обычно делают как раз наоборот. Да и старик Дейт на NULL ругался как на беса. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 13:49 |
|
|
start [/forum/topic.php?fid=53&msg=40101954&tid=1993830]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 262ms |
total: | 401ms |
0 / 0 |