SQL Server 2008에서 복합 기본 키를 만드는 방법


178

SQL Server 2008에서 테이블을 만들고 싶지만 복합 기본 키를 만드는 방법을 모르겠습니다. 어떻게하면 되나요?


1
당신은 asp.net에, 충고는 새로운있는 한 : 복합 기본 키가 있습니다 나쁜 일이 일반적으로 잘못 생각 아웃 디자인 나타내는 것을
smirkingman

47
@smirkingman 복합 기본 키로 거의 독점적으로 매우 중요한 문제를 해결할 수 있습니다. 예를 들어 행을 단일 테이블 / 엔티티 유형으로 저장하는 수백 / 수천 명의 사용자가있는 경우와 같습니다. user-id로 정렬 된 행과 두 번째 값을 차례로 원합니다. 귀하의 가치 판단은 간단하지 않습니다. 그렇지 않은 경우 조만간이 기능을 사용하지 않을 것입니다.
니콜라스 피터슨

답변:


243
create table my_table (
     column_a integer not null,
     column_b integer not null,
     column_c varchar(50),
     primary key (column_a, column_b)
);

2
@ matthew-abbott의 예에서 와 같이 기본 키CONSTRAINT를 사용하는 것의 차이점은 무엇입니까 ?
mateuscb 2009 년

28
그것은 이름으로 업데이트 / 삭제 될 수 있습니다 명명 된 제약 조건 생성
longhairedsi

14
사실이 아닙니다. 둘 다 "명명 된 제약"을 만듭니다. 전자의 경우 이름을 제어 할 수 없습니다. 그러나 일단 생성되면 사용 된 이름을 찾아 이름으로 삭제 / 업데이트 할 수 있습니다.
Auspex

170
CREATE TABLE UserGroup
(
  [User_Id] INT NOT NULL,
  [Group_Id] INT NOT NULL

  CONSTRAINT PK_UserGroup PRIMARY KEY NONCLUSTERED ([User_Id], [Group_Id])
)

34
+1-예, 제약 조건의 이름을 지정하십시오. 그렇지 않으면 Sql Server는 한 릴리스의 DB에서 PK_UserGrou_5DEAEAF5와 다른 릴리스의 PK_UserGrou_3214EC0777F66C69와 같은 불쾌한 이름을 지정합니다. 먼저 db에서 이름을 가져 와서 동적 sql을 사용하거나 코드에서 명령을 먼저 작성해야하므로 PK를 업데이트하거나 삭제해야하는 경우이 작업은 고통입니다. 또한 추악합니다.
monty

2
PK를 클러스터하지 않으려는 이유가 있습니까?
오전 4시

1
@ 4AM이 질문에 대한 답변이 될 수도 있습니다 : link
Dongminator

52

엔터프라이즈 관리자 (SSMS)를 통해 ...

  • 복합 키를 작성할 테이블을 마우스 오른쪽 단추로 클릭하고 디자인을 선택하십시오 .
  • 복합 키로 구성하려는 열을 강조 표시하십시오.
  • 해당 열을 마우스 오른쪽 버튼으로 클릭하고 기본 키 설정

SQL을 보려면 당신은 다음 마우스 오른쪽을 클릭하면 Table> Script Table As>Create To


2
감사합니다. 이것은 SQL 구문을 엉망으로 만들지 않고 가장 안전하고 쉬운 방법입니다.
AlbatrossCafe

1
이를 통해 디자인 / 가이드 인터페이스를 통해 빠른 수정을 원하는 사람들이 쉽게 사용할 수 있습니다. 도와 주셔서 감사합니다.
Trevor Nestman 2016 년

32

이 파티에 늦었다는 것을 알고 있지만 기존 테이블의 경우 다음을 시도하십시오.

ALTER table TABLE_NAME
ADD CONSTRAINT [name of your PK, e.g. PK_TableName] PRIMARY KEY CLUSTERED (column1, column2, etc.)

27

MSSQL Server 2012의 경우

CREATE TABLE usrgroup(
  usr_id int FOREIGN KEY REFERENCES users(id),
  grp_id int FOREIGN KEY REFERENCES groups(id),

  PRIMARY KEY (usr_id, grp_id)
)

최신 정보

추가해야합니다!

외래 / 기본 키 변경을 추가하려면 먼저 제약 조건이있는 키를 만들어야합니다. 그렇지 않으면 변경할 수 없습니다. 아래에 이렇게 :

CREATE TABLE usrgroup(
  usr_id int,
  grp_id int,

  CONSTRAINT FK_usrgroup_usrid FOREIGN KEY (usr_id) REFERENCES users(id),
  CONSTRAINT FK_usrgroup_groupid FOREIGN KEY (grp_id) REFERENCES groups(id),

  CONSTRAINT PK_usrgroup PRIMARY KEY (usr_id,grp_id)
)

실제로 마지막 방법은 건강하고 연속적입니다. FK / PK 제약 조건 이름 (dbo.dbname> 키> ..)을 볼 수 있지만 제약 조건을 사용하지 않으면 MSSQL은 임의의 FK / PK 이름을 자동으로 만듭니다. 필요한 모든 변경 사항 (표 변경)을 확인해야합니다.

스스로 표준을 세우는 것이 좋습니다. 구속 조건은 표준에 따라 정의해야합니다. 암기 할 필요가 없으며 너무 오래 생각할 필요가 없습니다. 요컨대, 당신은 더 빨리 일합니다.


이것은 PK를 만들지 않고 FK 만 만들지 않습니까?
batmaci

@ 배트 마치; 아니요, FK와 FK의 이중 FK 그룹입니다. 그 사용이 더 건강합니다. 나는 조언한다. PK를 만들지 않으면 PK를 사용할 수도 있습니다.
Fatih Mert Doğancan

1

먼저 데이터베이스와 테이블을 작성하고 열을 수동으로 추가하십시오. 기본 키가 될 열 이 열을 마우스 오른쪽 단추로 클릭하고 기본 키를 설정하고 기본 키의 시드 값을 설정해야합니다.


-3

테이블에서 복합 고유 키를 만들려면

ALTER TABLE [TableName] ADD UNIQUE ([Column1], [Column2], [column3]);

-3
CREATE TABLE UserGroup
(
  [User_Id] INT Foreign Key,
  [Group_Id] INT foreign key,

 PRIMARY KEY ([User_Id], [Group_Id])
)

2
너무 몇 가지 설명을 추가
압둘라 Nilam에게
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.