沿着這些線的東西應該工作。我相信你可以修復MySQL的語法。
我省略了自動編號,因爲它們可以隱藏真正發生的事情。所有表格都至少有5NF,如果您使用自動增量數字,則可能會忽略這一點。
create table events (
event_id integer primary key
);
create table races (
event_id integer not null references events (event_id),
race_id integer not null,
primary key (event_id, race_id)
);
create table registrations (
event_id integer not null,
race_id integer not null,
foreign key (event_id, race_id)
references races (event_id, race_id),
registration_id integer not null,
primary key (event_id, race_id, registration_id),
bib_number integer not null,
unique (event_id, bib_number)
);
下面是一些示例數據。
-- Two events.
insert into events values (1);
insert into events values (2);
-- Three races in each event.
insert into races values (1,1);
insert into races values (1,2);
insert into races values (1,3);
insert into races values (2,1);
insert into races values (2,2);
insert into races values (2,3);
-- Some registrations.
insert into registrations values (1, 1, 1, 51);
insert into registrations values (1, 1, 2, 52);
insert into registrations values (1, 1, 3, 53);
insert into registrations values (1, 1, 4, 54);
insert into registrations values (1, 2, 1, 61);
insert into registrations values (1, 2, 2, 62);
insert into registrations values (1, 2, 3, 63);
insert into registrations values (1, 2, 4, 64);
insert into registrations values (1, 3, 1, 71);
insert into registrations values (1, 3, 2, 72);
insert into registrations values (1, 3, 3, 73);
insert into registrations values (1, 3, 4, 74);
-- These bib numbers were already used, but not in event 2.
insert into registrations values (2, 1, 1, 51);
insert into registrations values (2, 1, 2, 52);
insert into registrations values (2, 1, 3, 53);
insert into registrations values (2, 1, 4, 54);
不知道這是可能的(這就是爲什麼這是一個評論而不是答案),但你有沒有嘗試在視圖上創建一個唯一的索引? –
圍棋號碼是賽事獨有的,而不是比賽? –
@Catcall,OP希望確保Bib編號對*整個*事件是唯一的,而不是*比賽。 –