Итак, у меня есть это упражнение, которое я пытаюсь решить. У меня есть база данных, и мне нужно добавить ограничение. Я не знаю, правильно ли я решил, потому что я новичок в этом, и я пытаюсь научиться сам, но после поиска я пришел к выводу, что это может быть с помощью ограничения внешнего ключа.
Вот соответствующие таблицы для этого вопроса в моей базе данных:
MusicGroup(idG, name, city, country, year)
Edition(idG, titleE, year, editor)
idG : FK(MusicGroup)
Music(idG, titleM, length)
idG : FK(MusicGroup)
Album(idG, titleE)
idG, titleE : FK(Edition)
Track(idG, titleE, number, titleM)
idG, titleE : FK(Album)
idG, titleM : FK(Music)
Single(idG, titleE, titleM)
idG, titleE : FK(Edition)
idG, titleM : FK(Music)
Вот инструкция по созданию базы данных (также сделанная мной):
create table MusicGroup (idG char(10) not null
unique(idG),
name varchar(255) not null,
city varchar(255) not null,
country varchar(255) not null,
year numeric(6,0) not null,
primary key (idG))
create table Edition (idG char(10) not null,
titleE varchar(50) not null,
year numeric(6,0) not null,
editor varchar(255) not null,
primary key (idG, titleE),
foreign key(idG) references MusicGroup(idG))
create table Music (idG char(10) not null,
titleM varchar(50) not null
unique(titleM),
length float(1) not null,
primary key (idG, titleM),
foreign key(idG) references MusicGroup(idG))
create table Album (idG char(10) not null,
titleE varchar(50) not null,
primary key (idG, titleE),
foreign key(idG, titleE) references Edition(idG, titleE))
create table Track (idG char(10) not null,
titleE varchar(50) not null,
number smallint not null,
titleM varchar(50) not null,
primary key (idG, titleE, number),
foreign key(idG, titleE) references Album(idG, titleE),
foreign key(idG, titleM) references Music(idG, titleM))
create table Single (idG char(10) not null,
titleE varchar(50) not null,
titleM varchar(50) not null,
primary key (idG, titleE),
foreign key(idG, titleE) references Edition(idG, titleE),
foreign key(idG, titleM) references Music(idG, titleM))
Я должен добавить следующее ограничение: Название альбома должно быть названием одного из треков на этом альбоме, и этот трек должен быть уже опубликован как сингл.
Итак, я попытался решить следующим образом:
alter table Album
add foreign key (idG, titleE, titleE) references Track(idG, titleE, titleM)
alter table Track
add foreign key (idG, titleE, titleM) references Single(idG, titleE, titleM)
Я должен сказать, что первый внешний ключ не кажется слишком хорошим, но, как я уже сказал, я новичок в этом.
Заранее большое спасибо за любую помощь:)