Просто сделайте ограничение FOREIGN KEY
.B.ID
все еще может быть NULL
.
Вы найдете несколько примеров на psoug
Я бы не рекомендовал хранить 0
вместо NULL
.0
не имеет семантики в реляционных данных, и ручное ограничение CHECK
будет сложнее поддерживать и, вероятно, намного менее эффективно, поскольку оптимизатор на основе затрат Oracle может не использовать его для своих преобразований запросов.Лучше вставить NULL
в столбец внешнего ключа и, возможно, прочитать его, используя любое из следующих эквивалентных выражений:
NVL(B.ID, 0)
DECODE(B.ID, NULL, 0, B.ID)
CASE B.ID WHEN NULL THEN 0 ELSE B.ID END