我面对的是下面的湿疹。
考虑下面的代码--这是我用来描述问题的东西--不是一个真正的实现,我省略了一些检查约束和NOT NULL,以避免给画面蒙上阴影。
CREATE TABLE Theater_Halls(
thha_id NUMBER(2) CONSTRAINT pk_thha_id PRIMARY KEY,
thha_name VARCHAR2(30) CONSTRAINT nn_thha_name NOT NULL,
thha_no_of_seats NUMBER(4) CONSTRAINT ch_thha_no_of_seats CHECK (thha_no_of_seats > 0)
CONSTRAINT nn_thh_no_of_seats NOT NULL
);
CREATE TABLE Seats (
seat_id NUMBER (8) CONSTRAINT pp_seat_id PRIMARY KEY,
seat_no NUMBER (4) CONSTRAINT ch_seat_no CHECK (seat_no > 0),
thha_id NUMBER(2) CONSTRAINT fk_seat_thha_id REFERENCES Theater_Halls(thha_id)
);
CREATE TABLE Events ( -- each event has a hall in theater associated with it
evnt_id NUMBER(4) CONSTRAINT pk_evnt_id PRIMARY KEY,
evnt_name VARCHAR2(30) CONSTRAINT nn_evnt_name NOT NULL,
thha_id NUMBER(2) CONSTRAINT fk_evnt_thha_id REFERENCES Theater_Halls(thha_id),
evnt_date TIMESTAMP CONSTRAINT nn_evnt_time NOT NULL
);
CREATE Table Users (
user_id NUMBER(10) CONSTRAINT pk_user_id PRIMARY KEY
);
CREATE TABLE Bookings (
bkng_id NUMBER(10) CONSTRAINT pk_bkng_id PRIMARY KEY,
evnt_id NUMBER(10) CONSTRAINT fk_bkng_evnt_id REFERENCES Events(evnt_id),
seat_id NUMBER(8) CONSTRAINT fk_bkng_seat_id REFERENCES Seats(seat_id),
user_id NUMBER(10) CONSTRAINT fk_bkng_user_id REFERENCES Users(user_id),
bkng_price NUMBER(6,2) CONSTRAINT nn_bkng_price NOT NULL,
CONSTRAINT un_evnt_seat_user UNIQUE (evnt_id, seat_id)
);现在,从某种意义上说,这个实现是令人满意的标准,它保存数据时没有(看起来)异常。
不过,我有两个问题。
发布于 2016-06-03 03:18:39
我想您不需要EVENT_SEATS表。您甚至不需要使用NULL for userid填充NULL。只需将Bookings表保留为空。您可以使用以下方法查询可能预订的事件:
select e.EVNT_NAME as EventName, s.seat_no as AvailableSeat
from events e
join seats s
on s.thha_id = e.thha_id
left join Bookings b
on b.seat_id = s.seat_id and
b.evnt_id = e.thha_id
where e.evnt_id = 1 and
b.bkng_id is null当创建预订记录时,b.bkng_id is null将从可能的预订列表中删除结果。
https://stackoverflow.com/questions/37601434
复制相似问题