저자 :작성자Herouth Maoz
편집자 주 :이것은 원래 우편물에 나타났습니다 질문에 대한 응답으로 목록 : "차이는 무엇입니까? 기본 키 및 고유 한 제약 조건? ".
제목 : Re : [질문] 기본 키 | 고유한 다음의 차이점은 무엇입니까? 기본 키 (필드, ...) 및 독특한 (들판, ...) - 이것은 별칭입니까? - 기본 키가 이미 고유 한 경우 그 이유는 이유가 있습니다 고유 한 또 다른 종류의 키가 있습니까?
기본 키는 특정 행을 식별하는 데 사용되는 필드입니다. 예를 들어, 사람을 식별하는 사회 보장 번호.
단순히 고유 한 필드 조합은 아무 관련이 없습니다. 행을 식별합니다. 그것은 단순히 무결성 제약입니다. 을 위한 예를 들어, 링크 컬렉션이 있습니다. 각 컬렉션이 식별됩니다 고유 한 숫자로 기본 키입니다. 이 키는 다음에 사용됩니다 처지.
그러나 내 응용 프로그램에는 각 컬렉션도 필요합니다 독특한 이름이 있습니다. 왜? 그래서 수정하고자하는 인간 컬렉션은이를 식별 할 수 있습니다. 알기가 훨씬 어렵습니다. "생명 과학"이라는 두 개의 컬렉션이 있다면 태그 24433은 필요한 것입니다. 아니다.
따라서 사용자는 이름으로 컬렉션을 선택합니다. 그러므로 우리 데이터베이스를 사용하여 이름이 고유한지 확인하십시오. 그러나 아니요 데이터베이스의 다른 테이블은 컬렉션 테이블과 관련이 있습니다. 수집 이름. 그것은 매우 비효율적입니다.
고유 한 것이지만 컬렉션 이름은 그렇지 않습니다 실제로 컬렉션을 정의하십시오! 예를 들어, 누군가가 결정했다면 컬렉션의 이름을 "생명 과학"에서 "생물학"으로 변경하십시오. 그것은 여전히 다른 이름으로 만 같은 컬렉션이 될 것입니다. 이름이 독특하다면 괜찮습니다.
so :
기본 키 :
행을 식별하고 관련하여 사용됩니다.
업데이트가 불가능하거나 어렵습니다.
널 허용하지 않아야합니다.
고유 필드 (들) :
행에 대한 대체 액세스로 사용됩니다.
독특한 상태로 유지되는 한 업데이트 가능합니다.
널은 허용됩니다.
표준에서 비 유적 키가 명시 적으로 정의되지 않은 이유SQL구문? 글쎄, 당신은 이해해야합니다 그 토토 캔는 구현 의존적입니다.SQL단지 구현을 정의하지 않습니다 데이터베이스의 데이터 사이의 관계.Postgres는 비 유적 토토 캔를 허용하지만 시행에 사용되는 토토 캔SQL키가 있습니다 항상 독특합니다.
따라서 열의 조합으로 테이블을 쿼리 할 수 있습니다. 이 열에 대한 색인이 없다는 사실에도 불구하고. 그만큼 인덱스는 단지 각각의 구현 원조 일뿐입니다.RDBMS일반적으로 사용하기 위해 제공합니다 보다 효율적으로 수행해야합니다. 일부RDBMS와 같은 추가 조치를 제공 할 수 있습니다 메인 메모리에 키를 저장합니다. 그들은 특별한 것을 가질 것입니다 예를 들어 명령
<pable 열 <cols에서 Memstore 만들기(이것은 기존 명령이 아니라 예제입니다).
실제로 기본 키 또는 고유 한 조합을 생성 할 때 필드의 어디에도SQL사양은 인덱스가 생성되었거나 키에 의한 데이터 검색은 순차적 스캔!
그래서, 그렇지 않은 필드 조합을 사용하려면 보조 키로 독특하면 실제로 지정할 필요가 없습니다. 무엇이든 - 그 조합으로 검색을 시작하십시오! 그러나 if 검색을 효율적으로 만들고 싶을 때 당신의 의미RDBMS제공자가 제공합니다 당신 - 그것은 색인, 나의 상상의 memstore 명령 또는 지능적인RDBMS보낸 사실에 근거한 지식이없는 토토 캔 특정 키 조합을 기반으로 한 많은 쿼리 ... (It 경험에서 배웁니다).