2016-11-01 7 views
0

내 데이터베이스에 직원의 고유 식별자를 만들려고합니다. 데이터베이스 전체에 중복되는 것을 피하기위한 것입니다. 즉, 직원 Barbra가 DB1에 저장되어있는 경우, 나는 그녀가 다시 생성되기를 원하지 않습니다. DB2에서.데이터베이스 네트워크상의 MySQL UID 시스템

초기 생각에는 직원 전화 번호에서 해시 (예 : SHA-1)를 사용하는 것이 좋습니다. 그런 식으로 충돌 가능성은 극도로 낮으며 값은 고유합니다.

그러나 UID는 UID의 크기, 정렬 된 구조 및 데이터 유형 (VARCHAR) 부족으로 인해 UID가 SELECT와 같은 쿼리를 수행하는 데 추가 리소스가 필요하다는 것을 알고 있습니다.

누구든지이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

+1

는 (은'UUID와 전 - 삽입 'trigger'을 시도해 봤어)'기능을 – Lars

+0

를 여러 직원 테이블을 가지고 있거나 다른 데이터베이스에 복사/복제 된 마스터를 가질 수없는 구조는 무엇입니까? – topshot

+0

질문이 명확하지 않습니다. 직원이 모든 데이터베이스 또는 예를 들어 각 부서에 정의 될 것입니까? 자체 직원이있는 자체 데이터베이스가 있습니까? – FDavidov

답변

1

sha1 생일이 좋지 않은 사람은 생일이 같으므로 해시 알고리즘 자체 내에서 충돌 가능성에 관계없이 충돌을 얻을 수 있습니다. 입력 범위는 제한적입니다 (생일). 각 데이터베이스가 db_id 데이터베이스의 위치의 숫자 고유 식별자입니다 (id, db_id)로 만든 복합 기본 키를 구현할 수 auto_increment_offset

  • 각 데이터베이스를 구현할 수

    • :

      몇 가지 옵션이 있습니다.

    • 당신은 UUID을 사용할 수 있지만 비용이 많이 드는 것으로 보입니다. 그러나 이것이 실행되는 데이터 세트 크기와 하드웨어가 없으면 아무것도 할 수 없습니다. UUID은 신속하게 문제를 해결합니다. . 당신은 쉽게 당신에게 고정 폭과 낮은 공간 풋 프린트 (예를 제공하는 binary(16) 컬럼 내로 UUID를 저장할 수 있습니다 : select unhex(replace(uuid(), '-', ''))