여기에는 많은 장단점이 있습니다. 실제로 문자열 키를 자주 사용하지만 조인을 위해 대리 보조 키를 포함하는 경우가 많습니다 (분명히 MySQL을 사용하는 경우에는 다른 방법 일 것입니다). 그러나 그렇지 않은 경우가 있습니다.
먼저 DB 가이를 잘 처리 할 수있는 기본 키로 자연 키를 선언하는 팬입니다 (예 : PostgreSQL). 이는 정규화에 도움이되고보다 명확한 데이터베이스 설계를 가능하게합니다. 서로 게이트 키를 사용하면 쉽게 연결할 수 있습니다.
일반적으로 대리 키를 추가하는 데는 두 가지 이유가 있습니다.
자연 키가 무엇인지 항상 명확하지는 않습니다. 때때로 이들은 변경되어야합니다. 조인 및 참조 무결성에 사용될 때 자연스럽고 복합적인 키를 변경하면 복잡하고 오류가 발생하기 쉽습니다.
복합 키의 조인 성능은 문제가되고 일단 자연스러운 키 경로를 따라 가면 문제가 발생합니다.
그러나 자연 키가 정의, 단일 열 및 텍스트 인 경우 일반적으로 문자열 키를 결합합니다. 그렇게하는 나의 이유는 이것이 종종 조회에서 조인을 피하기 때문입니다. 가장 일반적인 용도는 열거 형 유형의 사용 사례를 중심으로 적절한 db 디자인을 제공하는 것입니다. 대부분의 경우 일상적인 쿼리에 추가 조인이 필요 하지 않습니다 . 따라서이 경우 조인 키로 사용 되는 문자열 키 는 완벽합니다.
예를 들어 LedgerSMB에서는 계정 분류를 저장합니다. 이들은 문자열 참조로 식별되며 일부 다른 데이터는 계정에 영향을 줄 수있는 분류 조합에 관한 규칙을 시행하는 데 사용되는 문자열 참조와 함께 저장됩니다. 논리가 필요한 유일한 시간은 분류 세트를 저장할 때뿐이므로 문자열 키를 결합합니다.
기본값이 정수 키인 이유에 관해서는 인덱스 크기의 문제라고 생각하지 않습니다. 큰 문제는 키 관리입니다. 키는 임의적이며 수백만 개의 레코드를 처리 할 수 있으므로 고유 한 문자열을 생성하는 방법이 있어야합니다. 사람들이 이것을 위해 UUID를 사용하는 경우가 있지만 UUID 충돌 가능성이 0이 아니며 수십억 개의 레코드가 저장되는 경우이 확률은 실제로 볼 수있을만큼 높아지지만 증가 된 정수 유형과의 충돌 가능성은 0입니다 정의에 의해.