|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
База, в в ней таблички. Каждая табличка имеет суррогатный ключ типа Int64. Таблички связаны между собой с помощью FK - ограничений. Каждое поле, ссылающееся по FK на другую табличку, может быть как "nullable", так и "not null", в зависимости от особенностей FK - связи. Тут удобство null-ов не вызывает сомнений. С полями, реализующими FK-связи, вопросов нет. ... А еще есть поля, несущие уже "кондовую" смысловую нагрузку: Фамилия, Стоимость, Адрес... Какой смысл разрешать для таких полей значение null? Ну, можно придумать. Например, поле "Дата начала строительство". Пока оно null, строительство и не началось. Но ведь можно для этого задействовать какую-либо "волшебную константу", какой-нибудь Код: sql 1.
... Для строк использовать значение "пустая строка", для чисел - "0". Null, конечно, сам по себе является такой "волшебной константой". Но ведь значение 0 (или "пустая строка") можно использовать в запросах наравне с остальными значениями, а с null-ами приходится кочевряжиться! Вот и вопрос: есть ли смысл для "бизнес" - значений использовать типы с ограничениями Код: sql 1.
? Не создаст ли сие каких-либо неудобств в дальнейшем? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 00:08 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
Юзер 01Не создаст ли сие каких-либо неудобств в дальнейшем?Нулы в базе не хранятся, а значит экономят место, в отличие от волшебных констант. Но это еще полбеды. Потом эти константы полезут юзерам на экран. Фронтэндщикам геморой обеспечен. Нужно будет кастить все "это" в пустые значения. Вообщем, вас найдут и будут бить долго)) И фронт и бэк. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 02:57 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
Это религиозный вопрос ) Например, в Dynamics AX во всех таблицах вместо null дат используется значение 1900-01-01 00:00:00.000. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 03:11 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 03:19 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
Юзер 01Но ведь значение 0 (или "пустая строка") можно использовать в запросах наравне с остальными значениями, а с null-ами приходится кочевряжиться! Собственно в этом и смысл. Вам придётся учесть отсутствие значений, значит меньше возможностей натупить. И FK тоже для этого. Вам приходится учитывать наличие связей. Это всё делается от человеческих ошибок. Если бы человек не ошибался никогда, ничего этого было бы не нужно. Никаких констрейтов, связей, NULL-ов и прочего :) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 08:52 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
bideveloperЭто религиозный вопрос ) + Юзер 01Для строк использовать значение "пустая строка", для чисел - "0". Ничего плохого не вижу в том, что это будут значения по умолчанию, пока нет записи - ничего нигде не хранится, - это всего лишь значения по умолчанию, при добавлении записи пустая строка никого не испугает, а её и ноль и проще контролировать при вводе данных и бывает, что это и есть потом реальное значение... Если сам потом будешь дописывать лицо - то вообще делай как тебе удобнее и не парься... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 08:54 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
Relic HunterНулы в базе не хранятся, а значит экономят место, в отличие от волшебных констант.Пустая строка varchar тоже не хранится. А числа - наверняка даже когда они null также хранятся. Впрочем, какая разница, дело разве в этом? Relic Hunter...Нужно будет кастить все "это" в пустые значения...А для чего нужно пустую строку (или нули в числах) кастить в пустое значение? Например. Структуры данных на клиентской стороне не предусматривают null значений, разве что специальные, для совместимости с null-данными в БД. Relic Hunter...Вообщем, вас найдут и будут бить долго)) И фронт и бэк.Так в чем проблемы-то, конкретно? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 08:57 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
vmag...Если сам потом будешь дописывать лицо - то вообще делай как тебе удобнее и не парься... Я вот и спрашиваю - может, в чем-то подвох? Не зря ведь народ отстаивает важность null-ов. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 09:02 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
hVostt... И FK тоже для этого. Вам приходится учитывать наличие связей. Это всё делается от человеческих ошибок. Если бы человек не ошибался никогда, ничего этого было бы не нужно. Никаких констрейтов, связей, NULL-ов и прочего :)Про nullы в FK я сразу написал, в стартовом сообщении. О чем тут еще говорить? hVostt...Собственно в этом и смысл. Вам придётся учесть отсутствие значений, значит меньше возможностей натупить...Что за "смысл"? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 09:09 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
Юзер 01, NULL обозначает отсутствующее или неизвестное значение. Это не ноль (0), и не пустая строка (""), это вообще не значение. Вот и весь смысл. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 09:59 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
Юзер 01Так в чем проблемы-то, конкретно?Наверняка возникнет путаница и где-нибудь поедут результаты. Не верите? Тогда не используйте NULL и проверите на себе ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 10:06 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
Нулл в некот. СУБД не хранится в индексах, поэтому если нужно часто искать по поле = нулл, то это создаст ряд неудобств. Оба варианта имеют "+" и "-". ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 10:39 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
skyANAЮзер 01, NULL обозначает отсутствующее или неизвестное значение. Это не ноль (0), и не пустая строка (""), это вообще не значение. Вот и весь смысл. А Волга впадает в Каспийское море. К чему эта банальная сентенция? LSVНулл в некот. СУБД не хранится в индексах, поэтому если нужно часто искать по поле = нулл, то это создаст ряд неудобств. Оба варианта имеют "+" и "-". 1.Если null не использовать - какие могут быть неудобства с индексами? 2. Какие именно минусы, можно пару примеров? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 11:17 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
...удивительное желание отвечать на незаданные вопросы. ТС спрашивает о смысле использования значений null в полях, не являющихся ключевыми. Ему начинают отвечать копипастами типа "потом пожалеешь/намучаешься" или "нулл это ...". А почему, зачем - а вот так. Привыкли мы. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 11:22 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
Юзер 01hVostt...Собственно в этом и смысл. Вам придётся учесть отсутствие значений, значит меньше возможностей натупить...Что за "смысл"? Вы перечитайте моё сообщение. Почитайте про теорию искусственных ограничений в дизайне. Если совсем туго с мышлением и не доходит, ещё задайте вопрос, за каких хреном в оружии приделывают предохранители. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 11:32 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
чччД...удивительное желание отвечать на незаданные вопросы. ТС спрашивает о смысле использования значений null в полях, не являющихся ключевыми. Ему начинают отвечать копипастами типа "потом пожалеешь/намучаешься" или "нулл это ...". Не выдумывайте глупости. Отвечают строго по делу. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 11:39 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
чччДskyANAЮзер 01, NULL обозначает отсутствующее или неизвестное значение. Это не ноль (0), и не пустая строка (""), это вообще не значение. Вот и весь смысл. А Волга впадает в Каспийское море. К чему эта банальная сентенция? Если вам тяжело даётся банальное мышление и логика, то уже никакие сентенции тут не помогут. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 11:41 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
чччД1.Если null не использовать - какие могут быть неудобства с индексами? 2. Какие именно минусы, можно пару примеров?яннп. Изъясняйся точнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 11:53 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
чччДskyANAЮзер 01, NULL обозначает отсутствующее или неизвестное значение. Это не ноль (0), и не пустая строка (""), это вообще не значение. Вот и весь смысл. А Волга впадает в Каспийское море. К чему эта банальная сентенция? Именно к тому, что всё банально. Не надо искать тайный смысл и создавать тему для срача на форуме. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 12:09 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
Если пользователь не указал свой возраст, потому как женщина, то не надо делать из него младенца ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 12:13 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
Юзер 01Но ведь можно для этого задействовать какую-либо "волшебную константу", какой-нибудь cast(0 as date). .... можно использовать в запросах наравне с остальными значениями, а с null-ами приходится кочевряжиться! Да, это популярная идея. Чтобы вылечиться от неё, нужно устроиться работать на сопровождение продукта, созданного подобными гениями, и на своей шкуре ощутить, какое количество идиотских проблем вырастает из этих "некочевряжащихся" волшебных констант, и вдруг однажды осознать, что будь на их месте null-ы - такого бы не случилось. Тогда сразу становится понятно, зачем они нужны и почему "кочевряжиться" с ними нужно именно так. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 16:12 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
softwarer, примеры будут? Или неприятие связано с особенностями конкретной СУБД? В любимом оракле нулл и пустая строка - одно и то же. Но не совсем. Какого-то диавола в оракле length('') оказывается нуллом. И сравнение с пустой строкой тоже нулл. Ну, оракл он такой, своя религия. Оставим его, тут уже ничего не исправить. Ну вот кому конкретно станет плохо, когда length('') станет равен 0? Или AVG() станет возвращать действительно средний уровень дохода в семье именно на человека, а не средний уровень дохода только среди получающих этот доход? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 18:07 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
Юзер 01 примеры будут? Пожалуйста - таблица договоров, как водится, "Дата начала договора", "Дата окончания договора". Для действующих договоров, по Вашему предложению, в "Дату окончания" пишем 1900-01-01. Пишем запрос "получить договоры, закрытые на начало 2017 года" для случая с NULL и для Вашего случая, чешем в затылке на тему "Какой же получился проще?". Или для дат Вы захотите использовать вместо NULL уже 2 константы - Очень Большую и Очень Маленькую? И каждый раз при написании запроса гадать - А какую же из констант в поле писали раньше? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 18:22 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
Кот Матроскин Или для дат Вы захотите использовать вместо NULL уже 2 константы - Очень Большую и Очень Маленькую?Кстати, в PostgreSQL для дат так и есть, "infinity" и "-infinity", иногда очень удобно. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 18:30 |
|
Проектирование: есть ли смысл разрешать null-значения для "бизнес-данных"?
|
|||
---|---|---|---|
#18+
Юзер 01, skyANA все точно описал. При проектировании базы Вы на 100% не можете заложить все нужные константы на все случаи жизни для всех разных атрибутов всех разных сущностей. Может конечно и сможете, но это потребует умопомрачительной работы, анализа и знания данных предметной области, причем с учетом перспективы будущего. Т.е. есть большой шанс нарваться на то, что Ваша константа в один прекрасный момент вдруг станет не пустым значением для предметной области и бизнес-логики, со всеми вытекающими последствиями для системы. Null умные люди специально придумали именно для того, чтобы указывать что значение неизвестно. Это значение ни с чем не пересечется, оно не равно никакому другому значению в предметной области. Это как 0 - специальное число, которое до поры до времени числом не считали. Пока есть что считать, ноль нас мало интересует. Но чтобы обозначит как-то, что считать нечего, придумали 0. А в математ теориях это уже полноправное число и без него уже никак. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 19:00 |
|
|
start [/forum/topic.php?fid=32&msg=39608834&tid=1540052]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
172ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 291ms |
0 / 0 |