2010-01-28 2 views
1

내가 가진 말 :PK가 FK 인 테이블을 생성하기위한 SQL은 무엇입니까?

create table Post(
    PostID int not null constraint PK_Post primary key clustered, 
    Title nvarchar(200) not null 
) on [primary] 

create table PostDetail(
    PostID int not null constraint PK_PostDetail primary key clustered, 
    Text nvarchar(max) null 
) on [primary] 

가 어떻게 PostDetail.PostID FK가 Post.PostID를 참조해야합니까? 사실 후

+0

방법이 유용 할 것? –

답변

1

:

alter table PostDetail 
    add constraint FK_PostDetail_Post 
     foreign key (PostID) references Post (PostID) 

또는 데프 테이블에

:

create table PostDetail(
    PostID int not null constraint PK_PostDetail primary key clustered, 
    Text nvarchar(max) null, 
    constraint FK_PostDetail_Post foreign key (PostID) references Post (PostID) 
) on [primary] 
+1

에 대한 fk 제약 조건은 "clustered"단어 바로 뒤에 시작할 수 있습니다. 물론 그 사이에 공백이 있습니다. 구속 조건은 열 뒤의 같은 줄에 함께 묶을 수 있습니다. 그들은 제약 조건 중 하나를 넣을 때 모두 create 테이블의 끝에 놓을 수 있습니다. – ErikE

+0

@Emtucifor, 설명 주셔서 감사합니다! – Xerion

2

사용 :

ALTER TABLE POSTDETAIL 
    ADD CONSTRAINT fk_post 
     FOREIGN KEY (postid) REFERENCES POST (postid) 

나는 당신이 열거 한 것은 보이는 '라고해야하지만 일대일 관계 일 수 있습니다. POSTDETAIL 레코드 하나만 POST 레코드와 연결됩니다. 다음과 같이 사용할 수도 있습니다.

create table Post(
    PostID int not null constraint PK_Post primary key clustered, 
    Title nvarchar(200) not null, 
    Text nvarchar(max) null 
) on [primary] 
+0

CIX가 더 작기 때문에 대다수의 쿼리가 PostID 및 Title에 대한 것이면 별개의 테이블에 이들을 갖는 것이 유용 할 수 있습니다. 그 의도는 –

+0

입니다. 이 질문의 목적을 위해 테이블이 크게 단순화되었습니다. 그러나 Post에는 null이 아니며 빠른 목록 검색/정렬에 필요한 대부분의 간단한 열이 있습니다. PostDetail은 "세부 정보"보기의 텍스트, 이미지 큰 데이터를 포함합니다. 따라서 1 대 1의 관계를 갖는 2 개의 테이블. – Xerion

+0

;) @OMG : 이전에 이런 유형의 문제를 봤는데 그 중대한 이점을 보았습니다. 상단에 뷰가 있으면 매우 우아 할 수 있으므로 일반 테이블처럼 쿼리 할 수 ​​있습니다. –

1

에서 문제로 토니 Rogerson에 최근 조사를 조회 할 수 있습니다.

제목 ID (PK, FK - 제목 표) PUBLISHER_ID (PK, FK - 펍 테이블) 유효한이 - (무제한) 상태 비트