2017-02-14 7 views
3

Hallo Ich bin mit einem Fremdschlüssel Einschränkung in meiner Derby eingebettete Tabelle stecken. Ich habe drei Tische, nämlich Zimmer, Pakete und Reservierung.Derby Fremdschlüssel Einschränkung Problem

Zimmertisch --- RoomId | RaumName | Miete | Beschreibung

Packages Tabelle --- pkgId | Name | Bewerten | Details

Reserviertabelle --- Id | GastID | pkgId | RaumId | ChkIn | ChkOut | Datum |

Also die drei Fremdschlüssel in Reservierungstabellen sind GuestID, PkgId und RoomId.

Alles, was ich wollte, ist die Fremdschlüssel zu akzeptieren einige Werte, die nicht in ihren jeweiligen Tabellen ist. Zum Beispiel möchte ich pkgId in der Reservierungstabelle auf 0 setzen, wenn ein Gast keine Pakete nimmt. Aber aus irgendeinem Grund bekomme ich Fehler "UPDATE auf Tabelle 'RESERVATION' verursachte eine Verletzung der Fremdschlüsseleinschränkung .. für Schlüssel (0)". Ist das, weil die 0 kein Wert in der Tabelle "Packages" ist? Seltsamerweise war es kein Problem mit meiner früheren Bewerbung. Hat Derby etwas mit neuen JAR-Dateien geändert? Oder wie kann ich dieses Problem lösen? Ich möchte, dass sowohl RoomId als auch pkgId zu einem bestimmten Zeitpunkt in der Reservierungstabelle 0 akzeptieren, während die Fremdschlüsseleinschränkung beibehalten wird. Kann mir jemand helfen ? Danke im Voraus!

+1

verwenden entweder neue Datensatz in Paketen Tabelle einfügen => 'einfügen in Pakete (PkgID, name) values ​​(0, 'Gast nimmt keine Pakete') 'oder entfernen Sie den Fremdschlüssel oder verwenden Sie den NULL-Wert. Der Fremdschlüssel ist eine Einschränkung, die besagt, dass "der Fremdschlüsselwert ** immer ** in der referenzierten Tabelle vorhanden sein muss". – krokodilko

+0

Ich denke, ich werde mit dem Einfügen einer neuen Zeile gehen und diese Zeile vom Endbenutzer ausblenden. Aber ich bin nicht sicher, wie es in meinen früheren Derby-Versionen funktionierte. Vielen Dank. – Thomson

Antwort

2

In SQL ist 0 ein gültiger Wert wie jeder andere auch. Wenn Sie 0 als FK-Spalte festlegen, sucht es daher nach einer Zeile mit 0 in der verknüpften Tabelle.

Wenn Sie angeben mögen, dass es auf der anderen Tabelle nicht verwandte Reihe ist, sollten Sie null als ID

+0

Leider kann ich keinen Nullwert einfügen. Aber ich war verwirrt, da der 0-Wert in meiner früheren Derby-Version funktionierte. Wie auch immer, danke für die Bestätigung der Tatsache. – Thomson

Verwandte Themen