Внешние ключи и ПУСТОЙ УКАЗАТЕЛЬ в MySQL

Могу я иметь столбец в своей таблице значений (значение), на которое ссылаются как внешний ключ к knownValues таблице и позволять ему быть ПУСТЫМ при необходимости, как в примере:

Таблица: значения

 product     type     value     freevalue
 0           1        NULL      100
 1           2        NULL      25
 3           3        1         NULL

Таблица: типы

 id    name     prefix
 0     length   cm
 1     weight   kg
 2     fruit    NULL

Таблица: knownValues

id    Type     name
0     2        banana 

Примечание: Типы в таблице values & knownValues конечно, ссылаются в types таблица.

18
задан Eric Leschinski 3 February 2016 в 04:44
поделиться

5 ответов

NULL-ы во внешних ключах вполне допустимы. Работа с NULL во внешних ключах сложна, но это не означает, что вы должны изменить такие столбцы на NOT NULL и вставлять фиктивные ("N/A", "Unknown", "No Value" и т.д.) записи в свои справочные таблицы.

Использование NULL во внешних ключах часто требует использования LEFT/RIGHT JOIN вместо INNER JOIN.

23
ответ дан 30 November 2019 в 07:33
поделиться

Это отношение 1 к 0 ко многим. Я использовал это много раз в SQL Server. Я полагаю, что это можно сделать и в MySQL.

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

4
ответ дан 30 November 2019 в 07:33
поделиться

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

6
ответ дан 30 November 2019 в 07:33
поделиться

Конечно, есть возможность иметь значения NULL во внешнем ключе, но для этого вам не стоит беспокоиться об этом, я надеюсь, вы использовали InnoDB в качестве движка базы данных для управления ключевыми ограничениями. В этом случае я предлагаю использовать Left Join или Right Join для получения строк из БД, а для исключения дублирования можно использовать Group By. Пожалуйста, не используйте Inner Join.

1
ответ дан 30 November 2019 в 07:33
поделиться

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

1
ответ дан 30 November 2019 в 07:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: