2017-02-14 7 views
3

Привет, я застрял с ограничениями внешнего ключа в моей встроенной таблице дерби. У меня есть три стола, а именно номера, пакеты и бронирование.Проблема ограничения внешнего ключа Derby

Таблица номеров --- RoomId | RoomName | Аренда | Описание

Таблица упаковок --- pkgId | Имя | Оценить | Подробности

Таблица бронирования --- Id | Гостевая | pkgId | RoomId | ChkIn | ChkOut | Дата |

Таким образом, три внешних ключа в таблицах резервирования - GuestID, pkgId и roomId.

Все, что я хотел - это внешние ключи, чтобы принимать некоторые значения, которых нет в их соответствующих таблицах. Например, я хочу сделать pkgId в таблице резервирования равным 0, если гость не принимает пакеты. Но по какой-то причине я получаю ошибку «UPDATE на таблице« RESERVATION »вызвало нарушение ограничения внешнего ключа .. для ключа (0)». Это потому, что 0 не является значением в таблице Packages? Как ни странно, это не проблема с моим предыдущим приложением. Дерби что-то изменило с помощью новых файлов jar? Или как я могу решить эту проблему? Я хочу, чтобы и RoomId, и pkgId принимали 0 в таблице резервирования в некоторый момент времени, сохраняя ограничение внешнего ключа. Может кто-нибудь мне помочь ? Заранее спасибо!

+1

Либо вставить новую запись в пакетах таблицу => 'вставить в пакеты (pkgid, имя) значение (0, «гость не берет пакеты») 'или удаляет внешний ключ или использует значение NULL. Внешний ключ - это ограничение, в котором говорится, что «значение внешнего ключа ** всегда должно существовать ** в ссылочной таблице». – krokodilko

+0

Думаю, я поеду с вставкой новой строки и скрою эту строку от конечного пользователя. Но я не уверен, как он работал в моих предыдущих версиях дерби. Большое спасибо. – Thomson

ответ

2

в SQL, 0 - допустимое значение, как и любое другое. поэтому, если вы установите 0 как столбец FK, он будет искать строку с 0 в связанной таблице.

Если вы хотите, чтобы указать, что нет связанных строк на другой таблице, вы должны использовать null как ID

+0

К сожалению, я не могу вставить нулевое значение. Но я был смущен, поскольку значение 0 работало в моей ранней версии дерби. В любом случае, спасибо за подтверждение факта. – Thomson

Смежные вопросы