2009-09-09 2 views
27

제약 조건 (고유, 기본 키, 외래 키)의 이름 지정의 목적은 무엇입니까?제약 이름 지정의 목적은 무엇입니까

CREATE TABLE Order 
(
    LoginName  VARCHAR(50) NOT NULL, 
    ProductName  VARCHAR(50) NOT NULL, 
    NumberOrdered INT   NOT NULL, 
    OrderDateTime DATETIME  NOT NULL, 
    PRIMARY KEY(LoginName, OrderDateTime) 
); 

어떤 혜택 (있는 경우) 내 PK 가져올 명명 않습니다

내가 기본 키로 자연 키를 사용하는 테이블을 말해봐?

예 : 교체 :

PRIMARY KEY(LoginName, OrderDateTime) 

으로 내 데이터 모델이 최고 아닌 경우

CONSTRAINT Order_PK PRIMARY KEY(LoginName, OrderDateTime) 

미안 해요, 난이 새로운 해요!

+1

어쩌면 나중에 제약 조건을 참조하는 이름을 사용하는 것이 좋습니다. \ 편집을 삭제 하시겠습니까? – Aziz

답변

62

다음은 몇 가지 기본적인 이유입니다.

(1) 쿼리 (삽입, 업데이트, 삭제)가 제약 조건을 위반하면 SQL은 제약 조건 이름을 포함 할 오류 메시지를 생성합니다. 제한 조건 이름이 명확하고 설명 적이면 오류 메시지를보다 쉽게 ​​이해할 수 있습니다. 제약 조건 이름이 임의의 GUID 기반 이름 인 경우 명확하지 않습니다. 최종 사용자를위한 분과위원회 (누가 당신에게 전화 할 것인가)는 "FK__B__B_COL1__75435199"의 의미를 묻습니다.

(2) 향후 제약 조건을 수정해야하는 경우 (예 : 발생합니다), 이름이 무엇인지 모르는 경우 매우 어렵습니다. (ALTER TABLE MyTable drop CONSTRAINT um ...) "처음부터"데이터베이스 인스턴스를 두 개 이상 만들고 시스템 생성 기본 이름을 사용하면 두 이름이 일치하지 않습니다.

(3) 일요일 오전 3시에 코드 (일명 DBA)를 지원하는 사람이 케이스 (1) 또는 케이스 (2)를 처리하는 데 무의미한 시간을 낭비해야하는 경우, 코드가 어디에서 유래했는지 식별하고 그에 따라 반응 할 수있는 위치에 있어야합니다.

+1

+1 모든 기지를 다룹니다. – gbn

4

미래에 제약 조건을 식별하려면 (예 : 향후 제약 조건을 삭제하려는 경우) 고유 한 이름이 있어야합니다. 이름을 지정하지 않으면 데이터베이스 엔진에서 별개의 이름 (예 : 고유성을 보장하는 임의의 항목 포함)을 할당하여 사용자를 대신 지정합니다.

+0

사람들이 제약 조건을보다 쉽게 ​​식별 할 수 있도록 이름 지정이 사용된다는 것을 의미합니까? 즉, 제약 조건의 이름을 지정했는지 여부에 관계없이 DBMS에 영향을 미치지 않거나 영향을 미치지 않습니다. 어떤 목적으로 코드에서 사용할 수 없습니까? 그것이 불분명하면 죄송합니다. – Andrew

+1

그것은 단지 이름입니다. 기능상의 차이는 없습니다. 앞으로 코드에서이를 참조하려면 이름이 중요합니다. 마치 코드에서 변수 이름과 같습니다. –

+1

열 * 이름 *과 같이 변경하지 마십시오. 그들이 "BJZ0_340"또는 "Fred"대신 "ProductId"가 무엇인지 설명하면 훨씬 유용합니다. –

1

누군가가 실제 제약 조건을 보지 않아도 제약 조건이 무엇인지 빠르게 알 수 있습니다. 이름이 필요한 모든 정보를 제공하기 때문입니다.

따라서 기본 키, 고유 키 또는 기본 키는 물론 관련 테이블 및 가능하면 열도 알고 있습니다.

3

DBA를 행복하게 유지시켜 스키마 정의를 프로덕션 데이터베이스로 보냅니다.

+0

하하 ... 네, 이것이 가장 중요한 이유라고 생각합니다 : P – Andrew

3

코드가 임의로 외래 키 제약 조건을 위반하면 코드가 어느 것이 었는지 파악하기 위해 디버깅 시간을 절약 할 수 있습니다. 이를 명명하면 삽입 및 업데이트 디버깅이 매우 간단 해집니다.

1

모든 제약 조건의 이름을 올바르게 지정하면 특정 제약 조건을 데이터 모델과 신속하게 연결할 수 있습니다. 이렇게하면 두 가지 장점이 있습니다.

  1. 오류를 신속하게 확인하고 수정할 수 있습니다.
  2. 우리는 제약 조건을 안정적으로 수정하거나 삭제할 수 있습니다.