Задать вопрос
  • Какое ваше отношение к таблицам с внешним ключам с NULL значением?

    @Mylistryx
    А я за NULL! При ForeignKeys - корректное поведение, при unique - корректное поведение, при JOIN корректное поведение.
    FK позволяют организовать целостность данных на уровне БД (CASCADE/RESTRICT/ SET NULL -это уже от бизнес логики) и там нет ON DELETE SET 123 или ON DELETE SET 0, что говорит само за себя, как и NULL значения при LEFT JOIN.
    unique (column):
    null
    null
    1
    2
    ...
    - и это нормальное и правильное поведение, т.е. значения уникальны, если они указаны. С 0 или суррогатным значением так не выйдет и будет расти еще один костыль.
    По поводу экономии места - в нынешних реалиях, экономия на спичках.
    Про обработку NULL / NOT NULL -если используется ORM либо обертка какая, то там это обычно реализовано прозрачно. К примеру Yii2: ArModel::findOne(['col' => null]) само развернет в нужный SQL код. В других фреймворках думаю тоже.
    P.S. Имею ввиду MySQL, в других БД возможно по другому.
    Ответ написан
    Комментировать
  • Какое ваше отношение к таблицам с внешним ключам с NULL значением?

    Fernus
    @Fernus
    Техник - Механик :)
    Вот, по-моему мнению, что должно быть главным критерием при проектировании структуры в данном случае:

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


    P.S.: Вам больше место жалко или производительность? :)

    P.S.S.: Чем не устраивает 0 вместо NULL для чисел?

    P.S.S.S.: В запросах один фиг будет фигурировать либо "IS NULL/NOT NULL", либо "<> 0"...заморочки одни и те же по сути...а вот разница в этом всём как - "лысый" и "бритый" :)

    P.S.S.S.S.: Есть негласное правило...

    NULL нафиг не нужен, если все его свойства не используются...


    А вот какие оно имеет свойства:

    Если вы сравниваете значение NULL с другим значением NULL или любым другим значением, результатом является то, что значение NULL каждого значения NULL неизвестно. Обычно значение NULL используется для указания того, что данные отсутствуют, неизвестны или неприменимы.


    Но в данном случае у Вас по значению 0 и так будет понятно всё.

    Вопрос: нафиг этот NULL ? Все его "плюсы" в данном случае не работают...

    Ну и вот уже было тут:
    https://qna.habr.com/q/463917

    Выбор зависит от задач(и)...
    Ответ написан
  • Какое ваше отношение к таблицам с внешним ключам с NULL значением?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В более крупном масштабе это не работает. В географических справочниках и классификаторах есть одна
    проблема. Адресная строка - неформализуема.

    В разных странах и государствах после уровня страны например не всегда идут города или области. Там могут
    быть более сложные объекты (федеральные земли, периферии). И хуже того они могут стоять на разных уровнях. Улицы одного города могут внезапно иметь двойников (после слияния поселков к примеру). Могут быть улица Ленина, проспект и бульвар и переулок того-же имени.

    Вобщем если вы хотите иерархию - то можно делать иерархию. Но нельзя гарантировать жесткую типизацию для какого-то уровня. И с уникальностью - косяки.
    Ответ написан
    2 комментария