이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다현재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

7.7. 키

저자 :Herouth Maoz ( 작성자). 이것은 원래 사용자의 메일 링리스트에 나타났습니다 1998-03-02 질문에 대한 응답 : "무엇입니까 기본 키와 고유 한 제약 조건의 차이? ".

제목 : Re : [질문] 기본 키 | 고유한

        다음의 차이점은 무엇입니까 :

              기본 키 (필드, ...) 및
              독특한 (들판, ...)

       -이것은 별칭입니까?
       -기본 키가 이미 고유 한 경우 왜
         고유 한 또 다른 종류의 키가 있습니까?

기본 키는 특정 행을 식별하는 데 사용되는 필드입니다. 예를 들어, 사람을 식별하는 사회 보장 번호.

단순히 고유 한 필드 조합은 아무 관련이 없습니다. 행을 식별합니다. 그것은 단순히 무결성 제약입니다. 을 위한 예를 들어, 링크 컬렉션이 있습니다. 각 컬렉션은 다음과 같습니다 고유 한 숫자로 식별되는데, 이는 기본 키입니다. 이 열쇠 관계에 사용됩니다.

그러나 내 응용 프로그램에는 각 컬렉션이 필요합니다 또한 독특한 이름이 있습니다. 왜? 그래서 원하는 인간 컬렉션을 수정하면 식별 할 수 있습니다. 훨씬 어렵습니다 알기 위해, 두 개의 컬렉션이 있다면"생명 과학", 하나의 태그 24433은 하나입니다 당신은 필요하고, 태그 29882는 아닙니다.

따라서 사용자는 이름으로 컬렉션을 선택합니다. 그러므로 우리 데이터베이스 내에서 이름이 고유한지 확인하십시오. 하지만, 데이터베이스의 다른 테이블은 컬렉션 테이블과 관련이 없습니다. 컬렉션 이름으로. 그것은 매우 비효율적입니다.

또한 독특하지만 컬렉션 이름은 그렇지 않습니다 실제로 컬렉션을 정의하십시오! 예를 들어, 누군가가 결정한 경우 컬렉션 이름을 변경하려면"생명 과학"to"생물학", 그것은 여전히 같은 컬렉션이 될 것입니다. 다른 이름으로 만. 이름이 독특하다면 좋아요.

SO :

  • 기본 키 :

    • 는 행을 식별하고 관련시키는 데 사용됩니다 그것.

    • 업데이트가 불가능하거나 어렵습니다.

    • 널 허용하지 않아야합니다.

  • 고유 필드 (들) :

    • 행에 대한 대체 액세스로 사용됩니다.

    • 독특한 상태로 유지되는 한 업데이트 가능합니다.

    • 널은 허용됩니다.

기준SQL구문? 글쎄, 너 인덱스는 구현에 따라 다르다는 것을 이해해야합니다.SQL정의하지 않습니다 구현, 단지 데이터 간의 관계 데이터 베이스.PostgreSQL허용 비 유니 인덱스이지만 인덱스는 시행에 사용되었습니다SQL키는 항상 독특합니다.

따라서 열의 조합으로 테이블을 쿼리 할 수 있습니다. 이 열에 대한 색인이 없다는 사실에도 불구하고. 인덱스는 단지 각각의 구현 원조 일뿐입니다.RDBMS일반적으로 사용되는 쿼리가보다 효율적으로 수행됩니다. 일부RDBMS추가를 제공 할 수 있습니다 메인 메모리에 키를 저장하는 것과 같은 측정. 그들은 할 것입니다 특별 명령이 있습니다. 예를 들어

Memstore 생성테이블cols

(이것은 기존 명령이 아니라 예제입니다.)

실제로 기본 키 또는 고유 한 조합을 만들 때 필드의 어디에도SQL사양은 인덱스가 생성되었거나 키에 의한 데이터 검색은 순차적 스캔!

그래서, 그렇지 않은 필드 조합을 사용하려면 보조 키로 독특하면 실제로 지정할 필요가 없습니다. 무엇이든 - 그 조합으로 검색을 시작하십시오! 그러나 if 검색을 효율적으로 만들고 싶습니다. 당신의 수단에RDBMS제공자가 당신에게 제공합니다 - 색인, 나의 상상력Memstore명령 또는 지능형RDBMS인덱스를 생성합니다 당신이 그것을 보냈다는 사실을 바탕으로 당신의 지식없이 특정 키 조합을 기반으로 한 많은 쿼리 ... (It 경험에서 배웁니다).