Sie sollten hierfür eine Tabelle verwenden, es sei denn, Sie benötigen strengere Einschränkungen.
Jeder Bereich hat die gleiche Anzahl von Reihen und die gleiche Anzahl von Sitzplätzen pro Reihe.
Angenommen, es gibt 5 Reihen in jedem Bereich und 6 Sitzplätze in jeder Reihe. Sie möchten etwas in diese Richtung verwenden.
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)
);
Um einen einzelnen Sitzplatz auszuwählen, geben Sie drei Werte in die WHERE-Klausel ein.
select *
from seats
where area = 'A' and
row = 1 and
seat = 2;
Um einen Tisch wie diesen zum Modellieren von Sitzplatzreservierungen zu verwenden, füllen Sie ihn mit allen möglichen Bereichen, Reihen und Sitzplätzen. Stellen Sie dann einen Fremdschlüsselverweis darauf ein.
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)
);
Mit dieser Abfrage können Sie alle Sitzplätze für eine Aufführung anzeigen.
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'
Und Sie können alle verfügbaren Plätze für eine Aufführung mit etwas in dieser Richtung bekommen.
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
Standardmäßig erstellt SQL Server einen Clustered-Index für eine Primärschlüsseleinschränkung. Sie sollten die Reihenfolge der Spalten in Ihren Primärschlüsseleinschränkungen sorgfältig prüfen und auch andere Indizes hinzufügen. (Zumal Ihre Ausgänge häufig nach Fläche, Reihe und Sitz geordnet werden müssen.)