Гость
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"? / 25 сообщений из 76, страница 1 из 4
01.03.2018, 00:08
    #39608767
Юзер 01
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
База, в в ней таблички. Каждая табличка имеет суррогатный ключ типа Int64.
Таблички связаны между собой с помощью FK - ограничений. Каждое поле, ссылающееся по FK на другую табличку, может быть как "nullable", так и "not null", в зависимости от особенностей FK - связи. Тут удобство null-ов не вызывает сомнений.
С полями, реализующими FK-связи, вопросов нет.
...
А еще есть поля, несущие уже "кондовую" смысловую нагрузку: Фамилия, Стоимость, Адрес...
Какой смысл разрешать для таких полей значение null?

Ну, можно придумать. Например, поле "Дата начала строительство". Пока оно null, строительство и не началось. Но ведь можно для этого задействовать какую-либо "волшебную константу", какой-нибудь
Код: sql
1.
cast(0 as date)

...

Для строк использовать значение "пустая строка", для чисел - "0".

Null, конечно, сам по себе является такой "волшебной константой". Но ведь значение 0 (или "пустая строка") можно использовать в запросах наравне с остальными значениями, а с null-ами приходится кочевряжиться!

Вот и вопрос: есть ли смысл для "бизнес" - значений использовать типы с ограничениями
Код: sql
1.
not null & (devault value = 0|'')

?

Не создаст ли сие каких-либо неудобств в дальнейшем?
...
Рейтинг: 0 / 0
01.03.2018, 02:57
    #39608792
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
Юзер 01Не создаст ли сие каких-либо неудобств в дальнейшем?Нулы в базе не хранятся, а значит экономят место, в отличие от волшебных констант. Но это еще полбеды. Потом эти константы полезут юзерам на экран. Фронтэндщикам геморой обеспечен. Нужно будет кастить все "это" в пустые значения. Вообщем, вас найдут и будут бить долго)) И фронт и бэк.
...
Рейтинг: 0 / 0
01.03.2018, 03:11
    #39608793
bideveloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
Это религиозный вопрос )
Например, в Dynamics AX во всех таблицах вместо null дат используется значение 1900-01-01 00:00:00.000.
...
Рейтинг: 0 / 0
01.03.2018, 03:19
    #39608794
bideveloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
...
Рейтинг: 0 / 0
01.03.2018, 08:52
    #39608828
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
Юзер 01Но ведь значение 0 (или "пустая строка") можно использовать в запросах наравне с остальными значениями, а с null-ами приходится кочевряжиться!

Собственно в этом и смысл. Вам придётся учесть отсутствие значений, значит меньше возможностей натупить.

И FK тоже для этого. Вам приходится учитывать наличие связей. Это всё делается от человеческих ошибок. Если бы человек не ошибался никогда, ничего этого было бы не нужно. Никаких констрейтов, связей, NULL-ов и прочего :)
...
Рейтинг: 0 / 0
01.03.2018, 08:54
    #39608829
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
bideveloperЭто религиозный вопрос )
+
Юзер 01Для строк использовать значение "пустая строка", для чисел - "0".

Ничего плохого не вижу в том, что это будут значения по умолчанию, пока нет записи - ничего нигде не хранится, - это всего лишь значения по умолчанию, при добавлении записи пустая строка никого не испугает,
а её и ноль и проще контролировать при вводе данных и бывает, что это и есть потом реальное значение...
Если сам потом будешь дописывать лицо - то вообще делай как тебе удобнее и не парься...
...
Рейтинг: 0 / 0
01.03.2018, 08:57
    #39608831
Юзер 01
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
Relic HunterНулы в базе не хранятся, а значит экономят место, в отличие от волшебных констант.Пустая строка varchar тоже не хранится. А числа - наверняка даже когда они null также хранятся. Впрочем, какая разница, дело разве в этом?

Relic Hunter...Нужно будет кастить все "это" в пустые значения...А для чего нужно пустую строку (или нули в числах) кастить в пустое значение? Например. Структуры данных на клиентской стороне не предусматривают null значений, разве что специальные, для совместимости с null-данными в БД.

Relic Hunter...Вообщем, вас найдут и будут бить долго)) И фронт и бэк.Так в чем проблемы-то, конкретно?
...
Рейтинг: 0 / 0
01.03.2018, 09:02
    #39608832
Юзер 01
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
vmag...Если сам потом будешь дописывать лицо - то вообще делай как тебе удобнее и не парься...
Я вот и спрашиваю - может, в чем-то подвох? Не зря ведь народ отстаивает важность null-ов.
...
Рейтинг: 0 / 0
01.03.2018, 09:09
    #39608834
Юзер 01
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
hVostt...
И FK тоже для этого. Вам приходится учитывать наличие связей. Это всё делается от человеческих ошибок. Если бы человек не ошибался никогда, ничего этого было бы не нужно. Никаких констрейтов, связей, NULL-ов и прочего :)Про nullы в FK я сразу написал, в стартовом сообщении. О чем тут еще говорить?

hVostt...Собственно в этом и смысл. Вам придётся учесть отсутствие значений, значит меньше возможностей натупить...Что за "смысл"?
...
Рейтинг: 0 / 0
01.03.2018, 09:59
    #39608857
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
Юзер 01,

NULL обозначает отсутствующее или неизвестное значение. Это не ноль (0), и не пустая строка (""), это вообще не значение.
Вот и весь смысл.
...
Рейтинг: 0 / 0
01.03.2018, 10:06
    #39608860
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
Юзер 01Так в чем проблемы-то, конкретно?Наверняка возникнет путаница и где-нибудь поедут результаты.
Не верите? Тогда не используйте NULL и проверите на себе
...
Рейтинг: 0 / 0
01.03.2018, 10:39
    #39608879
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
Нулл в некот. СУБД не хранится в индексах, поэтому если нужно часто искать по поле = нулл, то это создаст ряд неудобств.

Оба варианта имеют "+" и "-".
...
Рейтинг: 0 / 0
01.03.2018, 11:17
    #39608904
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
skyANAЮзер 01,

NULL обозначает отсутствующее или неизвестное значение. Это не ноль (0), и не пустая строка (""), это вообще не значение.
Вот и весь смысл.
А Волга впадает в Каспийское море. К чему эта банальная сентенция?
LSVНулл в некот. СУБД не хранится в индексах, поэтому если нужно часто искать по поле = нулл, то это создаст ряд неудобств.

Оба варианта имеют "+" и "-".
1.Если null не использовать - какие могут быть неудобства с индексами?
2. Какие именно минусы, можно пару примеров?
...
Рейтинг: 0 / 0
01.03.2018, 11:22
    #39608910
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
...удивительное желание отвечать на незаданные вопросы.
ТС спрашивает о смысле использования значений null в полях, не являющихся ключевыми.
Ему начинают отвечать копипастами типа "потом пожалеешь/намучаешься" или "нулл это ...".

А почему, зачем - а вот так. Привыкли мы.
...
Рейтинг: 0 / 0
01.03.2018, 11:32
    #39608917
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
Юзер 01hVostt...Собственно в этом и смысл. Вам придётся учесть отсутствие значений, значит меньше возможностей натупить...Что за "смысл"?

Вы перечитайте моё сообщение. Почитайте про теорию искусственных ограничений в дизайне.

Если совсем туго с мышлением и не доходит, ещё задайте вопрос, за каких хреном в оружии приделывают предохранители.
...
Рейтинг: 0 / 0
01.03.2018, 11:39
    #39608920
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
чччД...удивительное желание отвечать на незаданные вопросы.
ТС спрашивает о смысле использования значений null в полях, не являющихся ключевыми.
Ему начинают отвечать копипастами типа "потом пожалеешь/намучаешься" или "нулл это ...".

Не выдумывайте глупости. Отвечают строго по делу.
...
Рейтинг: 0 / 0
01.03.2018, 11:41
    #39608926
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
чччДskyANAЮзер 01,

NULL обозначает отсутствующее или неизвестное значение. Это не ноль (0), и не пустая строка (""), это вообще не значение.
Вот и весь смысл.
А Волга впадает в Каспийское море. К чему эта банальная сентенция?

Если вам тяжело даётся банальное мышление и логика, то уже никакие сентенции тут не помогут.
...
Рейтинг: 0 / 0
01.03.2018, 11:53
    #39608932
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
чччД1.Если null не использовать - какие могут быть неудобства с индексами?
2. Какие именно минусы, можно пару примеров?яннп. Изъясняйся точнее.
...
Рейтинг: 0 / 0
01.03.2018, 12:09
    #39608940
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
чччДskyANAЮзер 01,

NULL обозначает отсутствующее или неизвестное значение. Это не ноль (0), и не пустая строка (""), это вообще не значение.
Вот и весь смысл.
А Волга впадает в Каспийское море. К чему эта банальная сентенция?
Именно к тому, что всё банально. Не надо искать тайный смысл и создавать тему для срача на форуме.
...
Рейтинг: 0 / 0
01.03.2018, 12:13
    #39608947
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
Если пользователь не указал свой возраст, потому как женщина, то не надо делать из него младенца
...
Рейтинг: 0 / 0
01.03.2018, 16:12
    #39609169
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
Юзер 01Но ведь можно для этого задействовать какую-либо "волшебную константу", какой-нибудь cast(0 as date). .... можно использовать в запросах наравне с остальными значениями, а с null-ами приходится кочевряжиться!
Да, это популярная идея. Чтобы вылечиться от неё, нужно устроиться работать на сопровождение продукта, созданного подобными гениями, и на своей шкуре ощутить, какое количество идиотских проблем вырастает из этих "некочевряжащихся" волшебных констант, и вдруг однажды осознать, что будь на их месте null-ы - такого бы не случилось. Тогда сразу становится понятно, зачем они нужны и почему "кочевряжиться" с ними нужно именно так.
...
Рейтинг: 0 / 0
01.03.2018, 18:07
    #39609290
Юзер 01
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
softwarer,

примеры будут? Или неприятие связано с особенностями конкретной СУБД?

В любимом оракле нулл и пустая строка - одно и то же.

Но не совсем. Какого-то диавола в оракле length('') оказывается нуллом.
И сравнение с пустой строкой тоже нулл. Ну, оракл он такой, своя религия. Оставим его, тут уже ничего не исправить.

Ну вот кому конкретно станет плохо, когда length('') станет равен 0?
Или AVG() станет возвращать действительно средний уровень дохода в семье именно на человека, а не средний уровень дохода только среди получающих этот доход?
...
Рейтинг: 0 / 0
01.03.2018, 18:22
    #39609310
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
Юзер 01
примеры будут?
Пожалуйста - таблица договоров, как водится, "Дата начала договора", "Дата окончания договора". Для действующих договоров, по Вашему предложению, в "Дату окончания" пишем 1900-01-01.
Пишем запрос "получить договоры, закрытые на начало 2017 года" для случая с NULL и для Вашего случая, чешем в затылке на тему "Какой же получился проще?".
Или для дат Вы захотите использовать вместо NULL уже 2 константы - Очень Большую и Очень Маленькую? И каждый раз при написании запроса гадать - А какую же из констант в поле писали раньше?
...
Рейтинг: 0 / 0
01.03.2018, 18:30
    #39609316
ChA
ChA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
Кот Матроскин Или для дат Вы захотите использовать вместо NULL уже 2 константы - Очень Большую и Очень Маленькую?Кстати, в PostgreSQL для дат так и есть, "infinity" и "-infinity", иногда очень удобно.
...
Рейтинг: 0 / 0
01.03.2018, 19:00
    #39609347
antand
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
Юзер 01,

skyANA все точно описал.
При проектировании базы Вы на 100% не можете заложить все нужные константы на все случаи жизни для всех разных атрибутов всех разных сущностей.
Может конечно и сможете, но это потребует умопомрачительной работы, анализа и знания данных предметной области, причем с учетом перспективы будущего.
Т.е. есть большой шанс нарваться на то, что Ваша константа в один прекрасный момент вдруг станет не пустым значением для предметной области и бизнес-логики, со всеми вытекающими последствиями для системы.
Null умные люди специально придумали именно для того, чтобы указывать что значение неизвестно. Это значение ни с чем не пересечется, оно не равно никакому другому значению в предметной области.

Это как 0 - специальное число, которое до поры до времени числом не считали. Пока есть что считать, ноль нас мало интересует. Но чтобы обозначит как-то, что считать нечего, придумали 0. А в математ теориях это уже полноправное число и без него уже никак.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"? / 25 сообщений из 76, страница 1 из 4
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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