-1
create table tImprumuturi
(
     ID_Imprumut int identity primary key,
     DataImprumut date default getdate(),
     DataScadenta as (dateadd(day,2,DataImprumut)) persisted,
     CodCD char(10) foreign key references tCD(CodCd)not null,
     CodCV char(10) foreign key references tCaseteVideo(CodCaseta),
     CodAb char(10) foreign key references tAbonati(CodAbonat) not null,
     CONSTRAINT ucCodes UNIQUE (CodCD,CodCV,CodAb)
)

同じ CodCD OR CodCV OR CodAb を多数持つことはしたくありませんが、同じ CodCD AND CodCV AND CodAb を持つ 2 つのレコードは決して持ちたくありません。ご覧のとおり、私のコードは一番上にあります。命令があってCONSTRAINT ucCodes UNIQUE (CodCD,CodCV,CodAb)も、同じ CodCD AND CodCV AND CodAb を持つ 2 つ以上のレコードを挿入できます。以下に私の記録を見ることができます

insert into tImprumuturi(CodCV,CodCD,CodAb)
values('CV21','CD20','ab9')
insert into tImprumuturi(CodCV,CodCD,CodAb)
values('CV21','CD19','ab9')
4

2 に答える 2

0
alter table  tImprumuturi add unique index(CodCD, CodCV, CodAb);
于 2013-08-31T21:40:18.263 に答える
0

一意の制約を追加する別の方法は、一意のインデックスを明示的に作成することです。

create unique index tImprumuturi_CodCD_CodCV_CodAb on tImprumuturi(CodCD, CodCV, CodAb);

create tableステートメントで直接行うこともできます。

create table . . .
    constraint unique(CodCD, CodCV, CodAb)
    . . .

alter tableこれらは両方とも機能のステートメントと同等です。私はたまたま明示的なインデックス作成を好みます。

編集:

あなたの質問は、あなたが何をユニークにしたいかについてまだ明確ではありません。個々の値が繰り返されないようにする場合は、それぞれに個別の一意のインデックスを作成します。

create unique index tImprumuturi_CodCD_CodCV_CodAb on tImprumuturi(CodCD);
create unique index tImprumuturi_CodCD_CodCV_CodAb on tImprumuturi(CodCV);
create unique index tImprumuturi_CodCD_CodCV_CodAb on tImprumuturi(CodAb);
于 2013-08-31T21:44:47.853 に答える