В вашей модели ER (Entity-Relationship) сущности Group и Contact являются (или должны быть) "зависимыми сущностями", то есть существованием Группа или Контакт основывается на 1 или более других объектах, в данном случае Адресная книга , что способствует идентификации объектазависимая сущность.Первичный ключ зависимого объекта является составным и включает в себя внешние ключи к объекту (ам), от которого он зависит.
Первичный ключ и Contact, и Group включает первичный ключ адресной книги, к которой они принадлежат,Как только вы это сделаете, все станет на свои места:
create table Address
(
id int not null ,
... ,
primary key (id) ,
)
create table Contact
(
address_book_id int not null ,
id int not null ,
... ,
primary key ( address_book_id , id ) ,
foreign key ( address_book_id ) references AddressBook ( id ) ,
)
create table Group
(
address_book_id int not null ,
id int not null ,
... ,
primary key ( address_book_id , id ) ,
foreign key ( address_book_id ) references AddressBook( id ) ,
)
create table GroupContact
(
address_book_id int not null ,
contact_id int not null ,
group_id int not null ,
primary key ( address_book_id , contact_id , group_id ) ,
foreign key ( address_book_id , contact_id ) references Contact ( address_book_id , id ) ,
foreign key ( address_book_id , group_id ) references Group ( address_book_id , id ) ,
)
Приветствия.