私はホテルの部屋を予約するためのデータベースを作成しています。私は、ゲストの 'dateFrom'変数が特定のゲストの 'dateFrom'と 'dateTo'変数の間にあるかどうかをチェックする制約に固執しています。すなわち、ゲストは一度に1つ以上の部屋を予約することはできません。それはあなたが長期的な値を必要とするように私には見えます...私はPostgresのSQLを知らない心の中でSQLは存在しません(...(...)と...(...))
CREATE TABLE tomsBooking
(
hotelNo HotelNo NOT NULL,
guestNo INT NOT NULL,
dateFrom DATE NOT NULL,
dateTo DATE NOT NULL,
roomNo RoomNumber
CONSTRAINT GuestOverlap
CHECK (NOT EXISTS
(SELECT * FROM tomsBooking b
WHERE b.guestNo = b.guestNo
AND b.dateTo >= dateFrom
AND b.dateFrom <= dateTo
)
)
);
@sstanああ、予約テーブルの最後にCONSTRAINTを置く方がいいですか? –
@sstan代わりにCONSTRAINTを使用するように質問を更新しましたが、まだエラーが発生しています。私は今私が持っているもので質問を更新しました。 –
この種のロジックは、依然としてチェック制約のためには複雑すぎます。チェック制約は、通常、単一の行のデータのみを検証することができます。私はPostgreSQLのエキスパートではありませんが、通常、この種の検証ロジックはトリガーでしか表現できないと思います。 – sstan