Bạn nên sử dụng một bảng cho việc này, trừ khi bạn cần các ràng buộc nghiêm ngặt hơn.
Mỗi khu vực có cùng số hàng và cùng số ghế trên mỗi hàng.
Giả sử có 5 hàng ở mỗi khu vực và 6 hàng ở mỗi hàng. Bạn muốn sử dụng một cái gì đó dọc theo những dòng này.
create table seats (
area char(1) not null check (area in ('A', 'B', 'C', 'D')),
row integer not null check ( row between 1 and 5 ),
seat integer not null check ( seat between 1 and 6 ),
primary key (area, row, seat)
);
Để chọn một chỗ ngồi, đặt ba giá trị trong mệnh đề WHERE.
select *
from seats
where area = 'A' and
row = 1 and
seat = 2;
Để sử dụng một bảng như thế này để mô hình đặt chỗ ngồi, hãy đặt nó với mọi khu vực, hàng và chỗ ngồi có thể. Sau đó đặt tham chiếu khóa ngoài cho nó.
create table reservations (
performance_time datetime not null,
party_name varchar(40) not null,
area char(1) not null,
row integer not null,
seat integer not null,
primary key (performance_time, party_name, area, row, seat),
foreign key (area, row, seat) references seats (area, row, seat)
);
Bạn có thể thấy tất cả các chỗ ngồi cho một hiệu suất với truy vấn này.
select s.area, s.row, s.seat, r.performance_time, r.party_name
from seats s
left join reservations r
on r.area = s.area and
r.row = s.row and
r.seat = s.seat and
r.performance_time = '2013-04-30 08:00 pm'
Và bạn có thể có được tất cả các chỗ ngồi có sẵn cho một buổi biểu diễn với một cái gì đó dọc theo những dòng này.
with seating as (
select s.area, s.row, s.seat, r.performance_time, r.party_name
from seats s
left join reservations r
on r.area = s.area and
r.row = s.row and
r.seat = s.seat and
r.performance_time = '2013-04-30 08:00 pm'
)
select *
from seating
where performance_time is null
Theo mặc định, SQL Server sẽ tạo một chỉ mục được nhóm cho một ràng buộc khóa chính. Bạn sẽ muốn suy nghĩ cẩn thận về thứ tự các cột trong các ràng buộc khóa chính của bạn và xem xét thêm các chỉ mục khác. (Đặc biệt vì đầu ra của bạn thường sẽ cần phải được sắp xếp theo khu vực, hàng và chỗ ngồi.)