2010-11-19 2 views

답변

0

당신이 필요 열에 FK를 추가한다고해서 해당 열에 인덱스가 자동으로 추가되는 것은 아닙니다. 이 작업은 두 단계로 수행해야합니다.

1) Make a column in your table a FK to a parent table. 
2) Add a unique constraint on that same column 
+0

하지만 두 개의 열을 고유 한 제약 조건 인 "Cons2cols"에 추가했습니다.나는이 "Cons2cols"를 외래 키로 테이블에 매핑하려고합니다. – subash

+1

미안하지만, 당신이 묻고있는 말을 정말로 이해하지 못합니다. –

1

죄송하지만 나는 당신이 무엇을 요구하고 있는지 정말로 모르겠습니다. 테이블 정의로 예제를 더 많이 제공하면 도움이 될 것입니다! 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가 다른 테이블에 있습니다.

8

부모 테이블에 자식 테이블에 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); 
0

지금은 고유 제한 조건에 대해 잊어 버려요. 두 개의 열에 새 외래 키를 만드십시오.

ALTER TABLE dbo.PurchaseDetail 
ADD FOREIGN KEY (Customer, Product) 
    REFERENCES dbo.Purchase (Customer, Product)