использование NULL лучше нуля по двум причинам.Во-первых, более ясно, что это «специальное» значение (ничто не заставляет идентификаторы таблиц всегда быть ненулевыми, хотя это часто верно для автоматически генерируемых идентификаторов), а во-вторых, это работает в SQL с ограничением внешнего ключа.
так что то, что вы делаете, является обычной практикой - многие люди используют NULL в качестве маркера, который говорит «пропущенное значение», и именно этого ожидает ограничение внешнего ключа SQL.
другой способ обработки пропущенных значений - этоиспользовать третью таблицу «link», в которой есть запись, только если есть связь между двумя классами (как вы сделали бы в отношении «многие ко многим»).это устраняет необходимость в NULL и поэтому предпочитается некоторыми пуристами базы данных, но делает все более сложным.см. Недопустимый обнуляемый внешний ключ? для дальнейшего обсуждения.