[SQL] SQL Server 2008의 복합 외래 키 만들기
SQLSQL Server 2008의 복합 외래 키 만들기
나는에 대한 외부 키를 생성하고 싶습니다 두 개의 테이블이있다.
기본 테이블
PK - Key1 - varchar(20)
PK - Key2 - date
보조 테이블
PK - AutoID
FK - Key1 - varchar(20)
FK - Key2 - date
나는 기본 및 보조 테이블 간의 관계를 만들려고 할 때, 나는 메시지가 계속
우리는 자동으로 번호를 생성 기본 키를 만들 수 있도록 같은 키 1과 키 2와 보조 테이블에 많은 레코드가있을 수 있습니다.
나는이 두 테이블 사이의 외래 키 관계를 설정하는 방법에 대한 어떤 생각?
해결법
-
==============================
1.이 중 일부는이 중 일부는이 같은 문제의 모든 종류 가진 다른 사람에 대한 상황이며, 집중 (첫번째 사람이 실제로 검색 등을?)
이 중 일부는이 중 일부는이 같은 문제의 모든 종류 가진 다른 사람에 대한 상황이며, 집중 (첫번째 사람이 실제로 검색 등을?)
당신은 당신이 두 테이블의 데이터 유형 불일치하지 않았다 있도록하는 키를 생성에 문제가있을 때 가장 먼저 확인합니다. 하나의 BIGINT 다른의 int이있는 경우, 그것을 날려 버리겠다. 이것은 모든 키에 대한 사실,하지만 당신은 여러 필드를 사용하는 경우 돌발 가능성이 높습니다. 간단한 수학은 이유있는 기회 증가를 보여줍니다.
다음 문제는 데이터입니다. 이 때문에 데이터에 키를 만들 수없는 경우에는 부모 테이블에 존재하지 않는 자식 테이블에 존재 무엇인지 찾을 수있다. 왼쪽 테이블 (의 제 / 좌측 보조 조인)에 가입하고 기본 테이블이 null이고 행만을 포함한다. 당신도 부모 테이블에서 이러한 레코드를 만들거나 그들을 제거해야합니다.
한 가지 방법은 "약"이 부모 테이블에 새 기본 키를 설정합니다. 그런 다음이 새 기본 키 외래 키를 생성하고 자식 테이블에 가능한 한 많은 레코드로 일치합니다. 그런 다음이 설정 조인 가지고 있고 보조 작업으로 청소에 대해 갈 수 있습니다.
어떤게 더 좋아? 복합 키를 가진 새로운 기본 키 또는 작업? 이건 정말 데이터의 특성에 따라 달라집니다,하지만 난 자연 키 또는 복합 키를 통해 파생 된 키를 사용하여 더 좋아한다. 그러나, 하나의 필드를 얻을하는 데 필요한 작업은 키가 많은 작업입니다 파생 때가있다.
-
==============================
2.외부 키 컬럼, 자신의 종류와 순서의 같은 수의 고유 인덱스 (PK 또는 영국)를 구성하는 열을 참조해야합니다. 예컨대 :
외부 키 컬럼, 자신의 종류와 순서의 같은 수의 고유 인덱스 (PK 또는 영국)를 구성하는 열을 참조해야합니다. 예컨대 :
CREATE TABLE PrimaryTable ( Key1 varchar(20), Key2 date) GO ALTER TABLE PrimaryTable ADD CONSTRAINT PK PRIMARY KEY (Key1, Key2) GO CREATE TABLE SecondaryTable ( AutoID int IDENTITY, Key1 varchar(20), Key2 date) GO ALTER TABLE SecondaryTable ADD CONSTRAINT FK FOREIGN KEY (Key1, Key2) REFERENCES PrimaryTable (Key1, Key2) GO
-
==============================
3.이것은 작동합니다 :
이것은 작동합니다 :
CREATE TABLE PTable ( Key1 varchar(20) not null, Key2 date not null, constraint PK_PTable PRIMARY KEY (Key1,Key2) ) CREATE TABLE STable ( AutoID int IDENTITY(1,1) not null primary key, Key1 varchar(20) not null, Key2 date not null, constraint FK_STable_PTable FOREIGN KEY (Key1,Key2) references PTable (Key1,Key2) )
당신이해야 할 것은 스크립트로 테이블을 관리 Studio를 얻고 그 위의 비교입니다.
-
==============================
4.이 좋은 답은 여기에 있습니다,하지만 난 더이 단계 싶습니다 - 후손을 위해서입니다.
이 좋은 답은 여기에 있습니다,하지만 난 더이 단계 싶습니다 - 후손을 위해서입니다.
외부 키 참조 중 하나를 기본 키 (고유, 클러스터 된 인덱스)에 있는가 또는 고유 다른 테이블에 열을 제약. 기본적으로 필요한 구성 요소는 고유 제약 조건입니다. 나는 당신이 당신의 외래 키에 널 (NULL) 컬럼을 가질 수 있음을 추가 할 수 있지만 허용 할 경우 "복합"키 SQL에 널 (null)은 외래 키 관계에있는 데이터의 검증을 건너 뜁니다. 이것은 우리의 대부분은 우리의 데이터베이스에서 데이터 무결성을 보장하기 위해 외래 키입니다 사용하는 주된 이유로서 기억해야 할 중요한 포인트입니다.
최종 메모에서 명시 적으로 같은 내 모든 키 이름을 선언합니다. 왜, 당신은 요청할 수 있습니다? 당신은 더 나은 검색 기능에 대한 미래의 "전체 텍스트 인덱싱"를 사용해야하는 경우는 키의 모든 "자동 생성"이름을 참조하는 힘, 그래서 일을하지. 이 데이터 변환 또는 예약 된 전체 텍스트 색인 업데이트를 필요로하지 않는 작은 프로젝트에 대한 큰 문제가되지 않을 수도 있습니다,하지만 당신은이 기능을 스크립팅하는 경우 (예를 들어 당신의 차의 실제 이름을 찾아 볼 필요가 당신의 일을 더 어렵게 만들 수 키의 기본 이름 : pk_someTable_1248594832828495904).
여기에 내가 어떤 미래의 함정을 피하기 위해 SQL을 서면으로 할 것 인 것이다 :
코드:
CREATE TABLE MySchema.PrimaryTable ( Key1 varchar(20) NOT NULL, Key2 date NOT NULL, CONSTRAINT PK_MySchema_PrimaryTable_Key1_Key2 PRIMARY KEY (Key1, Key2) ) GO CREATE TABLE MySchema.SecondaryTable ( AutoID int IDENTITY, Key1 varchar(20) NOT NULL, Key2 date NOT NULL, CONSTRAINT FK_MySchema_SecondaryTable_Key1_Key2 FOREIGN KEY (Key1, Key2) REFERENCES PrimaryTable (Key1, Key2) ) GO
OptillectTeam는 그의 대답에에 기본적으로 죽었어요. 난 그냥 전에 언급되지 않은 몇 가지 중요한 일을 명확히하고 싶었다. 외래 키 제약 조건 : 외래 키에 이것과 더 많은 논의 MSDN 시력에 좋은 참조가 있습니다.
-
==============================
5.QUERY BELOW UNIQUE KEY 사용을 추가
QUERY BELOW UNIQUE KEY 사용을 추가
ALTER TABLE [TableName] ADD UNIQUE ([Column1], [Column2]);
from https://stackoverflow.com/questions/6651667/creating-a-composite-foreign-key-in-sql-server-2008 by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] sp_executesql에 차이 대 저장 프로 시저의 EXEC? (0) | 2020.07.02 |
---|---|
[SQL] 하지 존재하는 경우 열을 추가 MYSQL (0) | 2020.07.02 |
[SQL] 어떻게 jDBI에서의 쿼리 할까? (0) | 2020.07.02 |
[SQL] 어떻게 T-SQL에서 제로 패딩 문자열로 int를 변환합니까? (0) | 2020.07.02 |
[SQL] ROW_NUMBER에 필요한 동적 피벗 () (0) | 2020.07.02 |