Проблема составного ключа SQL Server - PullRequest
2 голосов
/ 08 июля 2010

У меня есть 2 таблицы:

create table numbers2
(
id1 int IDENTITY(1,1) not null,
id2 int not null,
primary key(id1, id2)
)

и таблица 2

create table ttt
(
id int identity(1,1) not null,
first_name varchar(50) null,
last_name varchar(50) null,
sex varchar(1) check (sex in ('m', 'f')) null,
number_id int not null,
id_id1 int not null, 
id_id2 int not null,
primary key(id),
constraint fk_numbers_id1 foreign key (id_id1) references numbers2(id1)
on update no action
on delete no action
)

Проблема состоит в том, как добавить ограничение "fk_numbers_id1", чтобы оно ссылалось только на одну часть составного ключа из таблицы №2. Возможно ли это или есть другое решение?

1 Ответ

4 голосов
/ 08 июля 2010

Создать уникальное ограничение для numbers2.id1:

create table numbers2
(
id1 int IDENTITY(1,1) not null,
id2 int not null,
primary key(id1, id2),
unique(id1)
)

Я хотел бы знать, почему вы решили создать первичный ключ для двух столбцов, где первый столбец уже сам по себе уникален.Я уверен, что это нарушает какое-то правило нормальной формы, но я не могу вспомнить, какое из них.

Если вы сделали это, чтобы охватить данные в обоих столбцах, то делать это не нужно, простосделайте это вместо этого (при условии, что данные в id1 действительно уникальны):

create table numbers2
(
id1 int IDENTITY(1,1) not null,
id2 int not null,
primary key(id1),
)
create index cover_id2 on numbers2(id2) -- no need to include clustered index columns in a covering index
...