Я подумав про це, щоб трохи намагатися бути позитивним та обґрунтувати необхідність використання довільного значення замість нуля, і, здається, (мені щонайменше) для цього немає вагомих причин, за винятком, можливо, закритого набору даних обміну даними для покращення та спрощення продуктивності та запитів, а потім лише у випадках, коли цифри не є значеннями, які можуть перекосити дані. Навіть це треба було б уважно розглянути. У всіх ситуаціях у реальному світі надання нуля значення не є хорошою практикою. Це перетворює визначення колонки NOT NULL від вашого друга до вашого ворога, оскільки це дійсно не відповідає дійсності.
Зовсім інша річ сказати, що наша програма не повинна приймати значення NULL для деяких (або навіть усіх) стовпців. Це є розумною та доброю практикою, і є добре задокументовані переваги, щоб не допустити нулів (наприклад, ключі та індекси та статистичні розрахунки). Однак присвоєння значення "сидіти на місці" нуля зовсім не те саме. Це стрижень для вашої власної спини, оскільки ви повинні спершу вибрати значення, яке ніколи не буде використане, відфільтруйте це значення так, як було б нульове, і не пам'ятати, щоб не використовувати його в обчисленнях і підсумках, і видалити його з зовнішніх каналів даних . Це принаймні так само погано, як використання нуля для відображення фактичної величини. Це те, що ви говорите собі, що уникаєте, але це не так.
Більшість проблем, які викликають нулі, зрозуміли, можна вирішити (краща нормалізація, на основі функцій або індексів растрових зображень або простого WHERE x НЕ NULL). Чи вважаєте ви, що на якомусь великому Telco або Amazon на щомісячній зустрічі з ефективністю деякі DBA окреслюють цей чудовий план, щоб трохи прискорити запити на їх величезних наборах даних, "замінивши null на довільне значення, щось на зразок -5000, або що завгодно - Я відкритий на значення ... ". Або ви вважаєте, що вони витрачають свій час на кращий дизайн додатків, щоб відфільтрувати небажані нулі та оптимізацію запитів на основі фактичних даних, які вони отримують ? Гаразд, штраф, можливо, щомісячна зустріч є дещо оптимістичною, але, коли вони відбудуться, я можу запевнити, що "Заміна нульових значень на -5000 (або що завгодно) на кращий API" не є пунктом порядку денного.
Для мене добре сказати, що я не прийму відсутні дані (у вас повинен бути вік, ціна, код регіону чи будь-який інший), а іноді навіть добре сказати, що для цього стовпця є значення за замовчуванням, яке буде введено, якщо ви не ставите щось інше. Недоречно відкладати значення, яке означає нульове значення. Подумайте про приклади середніх імен як приклад. Іноді таких не буде, оскільки батьки ліниві, щоб заповнити всі поля. Чи додаємо ми "жодні" або "відсутні" чи "невідомі" до наших даних, щоб покращити пошук? Ні, тому що можуть бути дивні люди, які змінюють свої імена на ці значення, і тому, коли ми друкуємо дані, ми не знаємо, чи потрібно їх включати чи ні. Це простий, але далекосяжний приклад. Ми знаємо про NULL і маємо передбачувані вбудовані функції для боротьби з ним. Ви не можете це краще кодувати.
Якщо жодна відповідь (або NULL) не є дійсною відповіддю на ваш запит на введення, тоді не дозволяйте цього в додатку чи в базі даних, якщо це хороша відповідь, тоді ви повинні дозволити це як у вашій програмі, так і у вашій базі даних та мати справу з це як дійсна відповідь. Якщо вона є частиною набору дійсних відповідей, ваша база даних повинна бути розроблена для її зберігання. Зрештою, ви не кажете, ей, числові поля настільки нудні, дозволяють зберігати номери в краплі і використовувати зображення диких тварин для представлення кожного числа, адже це горіхи (круто, але горіхи). Ми також не вирішуємо, що нам не подобається літера B, і, як якийсь жорстокий кошмар на вулиці Сезам, замінить її на # у наших даних. Якщо B - не відповідь, ми хочемо сказати користувачеві "Ей, ви не можете поставити B тут" Так навіщо ставитися до нуля по-різному?
Тому уникайте нулів, яких ви не хочете, на рівні програми, і працюйте з ними у вашій базі даних, де ви приймаєте їх інакше, наскільки впевнені, що як жирафа + жирафа = бегемот, безглузді ваші дані приведуть вас у проблеми.