Могу я иметь столбец в своей таблице значений (значение), на которое ссылаются как внешний ключ к 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
таблица.
NULL-ы во внешних ключах вполне допустимы. Работа с NULL во внешних ключах сложна, но это не означает, что вы должны изменить такие столбцы на NOT NULL и вставлять фиктивные ("N/A", "Unknown", "No Value" и т.д.) записи в свои справочные таблицы.
Использование NULL во внешних ключах часто требует использования LEFT/RIGHT JOIN вместо INNER JOIN.
Это отношение 1 к 0 ко многим. Я использовал это много раз в SQL Server. Я полагаю, что это можно сделать и в MySQL.
Я предпочитаю избегать NULL в своих базах данных из-за проблем, связанных с агрегацией данных, поэтому, в зависимости от дизайна, я помещаю строку UNKNOWN в таблицу поиска.
Хотя вы можете сделать столбцы внешнего ключа допускающими значение NULL, я бы предположил, что в целом лучше разрабатывать таблицы без внешних ключей, допускающих значение NULL. Нулевые значения неизменно приводят к определенной двусмысленности и неверным результатам, но это вдвойне проблема, если ожидается, что рассматриваемые столбцы будут подвергаться некоторому ограничению.
Конечно, есть возможность иметь значения NULL во внешнем ключе, но для этого вам не стоит беспокоиться об этом, я надеюсь, вы использовали InnoDB в качестве движка базы данных для управления ключевыми ограничениями. В этом случае я предлагаю использовать Left Join или Right Join для получения строк из БД, а для исключения дублирования можно использовать Group By. Пожалуйста, не используйте Inner Join.
Да, вполне возможно иметь NULL в столбце с ограничением внешнего ключа. Я только что попробовал. Имейте в виду, что если вы не используете механизм хранения InnoDB, ваши ограничения внешнего ключа в любом случае будут проигнорированы.