답변
당신이 필요 열에 FK를 추가한다고해서 해당 열에 인덱스가 자동으로 추가되는 것은 아닙니다. 이 작업은 두 단계로 수행해야합니다.
1) Make a column in your table a FK to a parent table.
2) Add a unique constraint on that same column
죄송하지만 나는 당신이 무엇을 요구하고 있는지 정말로 모르겠습니다. 테이블 정의로 예제를 더 많이 제공하면 도움이 될 것입니다! I 생각하면 "Cons2cols"라는 고유 한 제약 조건에서 TableA에 두 개의 열이 있고이 두 열을 TableB의 두 열 PK/unqiue 쌍에 대한 FK가되기를 원합니다. 테이블이 이미이 사실 후이 같은 제약 조건을 추가 할 수있는 경우
CREATE TABLE TableB (
PK1 INT NOT NULL,
PK2 INT NOT NULL,
SomeData VARCHAR(1000),
CONSTRAINT PK_TableB PRIMARY KEY CLUSTERED (PK1, PK2)
)
CREATE TABLE TableA (
PK INT NOT NULL,
FK1 INT NOT NULL, -- Or NULL, if you''d rather.
FK2 INT NOT NULL,
CONSTRAINT PK_TableA PRIMARY KEY CLUSTERED (PK),
CONSTRAINT FK_TableA_FK1FK2 FOREIGN KEY (FK1, FK2) REFERENCES TableB (PK1, PK2),
CONSTRAINT Cons2cols UNIQUE(FK1, FK2)
)
: 처음부터 테이블을 만드는 경우, 다음과 같이 작동
ALTER TABLE TableA ADD CONSTRAINT FK_TableA_FK1FK2 FOREIGN KEY (FK1, FK2) REFERENCES TableB (PK1, PK2);
ALTER TABLE TableA ADD CONSTRAINT Cons2cols UNIQUE(FK1, FK2);
어느 쪽이든, TableA에는 이제 고유 한 2 열 FK가 다른 테이블에 있습니다.
부모 테이블에 자식 테이블에 FK 제약 조건을 추가하려면 관계의 부모 테이블 열에 고유 제약 조건을 추가해야합니다.
모든 나머지는 선택 사항입니다 또는 FK와 아무 상관이있다 :
- 자식 테이블 colums의 고유성의 기본 키
- 필요가 없습니다 (들)
부모없이 의무적 필요 테이블 (FK 관계)은 기본 키 테이블로 자주 호출되지만 (SSMS 포함) PK는 필요하지 않습니다. 상위 테이블의 고유 키/제약 조건이 충분합니다 (PK가 고유하므로 상위 테이블의 고유 제약 조건).
초보자를위한 혼란 answer by Matt에서 드롭 TableA의와 TableB의,
지금
CREATE TABLE parentB--TableB
(
PK1 INT NOT NULL,
PK2 INT NOT NULL,
--I would not have additional non-referenced data in parent table,
--rather in child table
--SomeData VARCHAR(1000),
--CONSTRAINT PK_TableB PRIMARY KEY CLUSTERED (PK1, PK2)
)
CREATE TABLE childA--TableA
(
--PK INT, -- NOT NULL,
FK1 INT-- NOT NULL, -- Or NULL, if you''d rather.
FK2 INT --NOT NULL --,
, SomeData VARCHAR(1000)
--CONSTRAINT PK_TableA PRIMARY KEY CLUSTERED (PK),
--CONSTRAINT FK_TableA_FK1FK2 FOREIGN KEY (FK1, FK2) REFERENCES TableB (PK1, PK2),
--CONSTRAINT Cons2cols UNIQUE(FK1, FK2)
)
그들을 다시 순서대로 먼저 독특한 만들어야합니다 FK
ALTER TABLE childA
ADD
--constraint FK1_childA
--this is optional, if one needs to add his own custom name
FOREIGN KEY (FK1) REFERENCES parentB(PK1);
를 추가 상위 테이블 열의 해당 참조 된 열에 대한 제약 조건 :
ALTER TABLE parentB ADD
--CONSTRAINT YourUniqueName --uncomment for adding your own name to constraint
UNIQUE(PK1)
마찬가지로 (첫째, 당신이 부모 테이블에서 고유 제한 조건에 해당 필요) 2 열 외래 키 제약
을 위해 :
ALTER TABLE parentB ADD
--CONSTRAINT YourUniqueName --for adding your own name to unique constraint
UNIQUE(PK1,PK2)
ALTER TABLE childA
ADD
--constraint yourUniqueName --uncomment for adding your own name to FK constraint
FOREIGN KEY (FK1, FK2) REFERENCES parentB(PK1, PK2);
지금은 고유 제한 조건에 대해 잊어 버려요. 두 개의 열에 새 외래 키를 만드십시오.
ALTER TABLE dbo.PurchaseDetail
ADD FOREIGN KEY (Customer, Product)
REFERENCES dbo.Purchase (Customer, Product)
하지만 두 개의 열을 고유 한 제약 조건 인 "Cons2cols"에 추가했습니다.나는이 "Cons2cols"를 외래 키로 테이블에 매핑하려고합니다. – subash
미안하지만, 당신이 묻고있는 말을 정말로 이해하지 못합니다. –