Quelque chose dans ce sens devrait fonctionner. Je suis sûr que vous pouvez réparer la syntaxe pour MySQL.
J'ai omis les numéros automatiques, car ils peuvent cacher ce qui se passe réellement. Toutes les tables sont au moins 5NF, un fait que vous pourriez négliger si vous utilisez des numéros auto-incrémentés.
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)
);
Voici quelques exemples de données à utiliser.
-- 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);
Vous ne savez pas si c'est possible (c'est pourquoi c'est un commentaire pas une réponse) mais avez-vous essayé de créer un index unique sur une vue? –
Le numéro de dossard est-il unique à l'événement, et non à la course? –
@Catcall, l'OP veut s'assurer que le numéro de dossard est unique à l'événement * entier *, et pas seulement à la course. –