Размещение значений NULL при сортировке столбцов

Оригинал

Если столбцы могут хранить NULL, то при сортировке используется определенный порядок размещения таких значений. В этом вопросе подход вендоров баз данных может как совпадать так и отличаться, в зависимости от цели приложения.

Использование

MySQL

PostgreSQL

Подробное объяснение 

NULL в SQL указывает на некое неизвестное значение, то есть просто не известно, что в столбце. Эти отсутствующие значения являются проблемой при сравнении их с другим значением и при сортировке строк в таблице. С математической точки зрения несуществующее значение нельзя сравнивать с чем-либо, например с каким-нибудь числом. Поэтому математически верная сортировка невозможна. Так как стандарт SQL не содержит указания как значения NULL должны обрабатываться при сортировке,  то каждая база данных была вынуждена изобретать свое собственное соглашение. В MySQL любое значение NULL будет помещено перед всеми другими значениями при выполнении сортировки по возрастанию, но в тоже время в PostgreSQL эти же значения будут размещены в конце. Оба подхода являются разными решениями для установления детерминированной сортировки, которую база данных может использовать.

Тем не менее, эти специфичные для конкретных баз данных порядки сортировки могут не соответствовать требованиям приложения. Для удобства использования можно размещать пустые значения в начале или в конце. Пользователь, сортирующий список имен по возрастанию или по убыванию, не захочет видеть пустые значения первыми когда ищет конкретную запись. Но в тоже время к отображению списка статей блога в админке будут предъявляться другие требования. Неопубликованные статьи должны быть выведены перед всеми опубликованными при сортировке по убыванию, чтобы увидеть их первыми.

Размещение значений NULL должно меняться в зависимости от контекста приложения, потому что сортировка по умолчанию базы данных не всегда будет полезна. Простое правило для проверки места расположения NULL:

  • размещайте NULL в конце когда пользователь может искать конкретные записи.
  • размещайте NULL в начале когда эти записи имеют конкретный смысл и поэтому должны предшествовать всем остальным.

Дополнительные ресурсы

Merge 2022

Представители нашей компании посетили конференцию Merge, которая проходила в Иннополисе 20 и 21 мая. Мероприятие было довольно интересным и нам хотелось бы поделиться впечатлениями о нём.

Читать →

Разбираемся с декораторами в JavaScript

Концепцию декораторов можно рассматривать с разных сторон. Это и шаблон проектирования описанный в известной книге GOF и подход применяемый в функциональном программировании для построения композиции функций. Как правило, когда говорят о декораторах в контексте ECMA Script, то под этим подразумевают функции, которые могут применяться к другим функциям или объектам для изменения или расширения их поведения. Иначе говоря, эти функции декорируют (оборачивают) другие функции или объекты.

Читать →

Несовершенство современного ПО на примере Unity

Разработка ПО в современном мире идет семимильными шагами. От релиза до релиза количество добавленых фич может составить несколько десятков (а порой счет идет и на сотни), а API измениться до неузнаваемости. И, вроде бы, в этом нет ничего плохо, но из-за количественных изменений довольно часто страдает качество. Баг-трекер забивается нерешенными задачами, частенько можно наблюдать регрессию по уже имеющемуся функционалу, а часть багов не правится по непонятным причинам, а порой и вовсе без таковых. Отправляемые баг-репорты отклоняются или ожидают минимального проекта для воспроизведения ошибки, а последний, зачастую, невозможно создать. А если все-таки удалось создать, то в ответ нередко получаешь отписку «У меня все работает».

И вишенка на торте — голосование за исправление багов. И если «ваша» проблема наберет большое количество лайков, то тогда, возможно, разработчики обратят внимание и поправят ошибку, хотя не факт. Бывают случаи, когда даже большое количество лайков не помогает. Увы (. И если баги (и то в основном критические, и то не всегда) худо-бедно правятся, то разного рода мелкие улучшения и полезности, которые могли бы сэкономить время, остаются за бортом, что не может не печалить. Само собой, вышеперечисленное относится не ко всему ПО вообще, а, скорее, это что-то типа средней температуры по палате.

Как вы уже могли догадаться, сегодня речь пойдет о нескольких мелких проблемах в Unity, вероятность исправления/улучшения которых стремится к нулю. Перечисленные ниже проблемы — это небольшая капля из того моря проблем, с которыми приходится сталкиваться ежедневно при работе с Unity. Думаю, если вы плотно общаетесь с Unity, то вам должно быть понятно, о чем идет речь. Вообще, стабильность Unity улучшается, и сейчас хотя бы можно стало работать (иногда недолго). Раньше это был просто кромешный ад из зависаний и крешей (сейчас же можно отработать день-другой, а можно встрять всего на полдня). И если на нашем относительно маленьком проекте столько проблем, трудно представить, сколько их на крупных проектах.
Читать →