Hacker News 의견
  • 고유하고 짧으며 사람이 읽기 쉬운 ID: Stripe에서 사용하는 cus_MJA953cFzEuO1z 같은 ID를 선호함. JavaScript/TypeScript로 생성하는 방법도 있음.
  • 개인 식별 번호: 덴마크의 CPR 번호와 미국의 SSN을 비교. SSN은 고유하지 않으며, 변경될 수 있고, 미국 시민이 아니어도 발급 가능함. 데이터베이스 키로 사용하지 말 것을 권장.
  • 별칭과 감사 로그: 덴마크 CPR 번호와 같은 자연 키를 사용할 때, 변경 사항을 기록하는 별도의 테이블이 필요함. URL도 자연 키로 사용 가능하지만 변경 시 리디렉션 테이블을 만들어야 함.
  • 자연 키의 한계: 고유 식별자가 변경되면, 모든 관련 정보를 추적해야 함. 인위적인 키를 추가하면 추적해야 할 정보가 더 많아짐. 데이터 모델링은 현실 세계를 반영해야 함.
  • 자연 키와 개인정보 보호: 자연 키에 개인 정보가 포함되면, 외래 키를 통해 다른 테이블에도 전파될 수 있음.
  • 게임 태그 예시: PlayStation Network의 게임 태그를 자연 키로 사용하는 예시. 게임 태그가 변경되지 않으면 고유 식별자로 사용 가능함.
  • 의료 분야 예시: 등록 직원이 잘못된 개인 건강 번호(PHN)를 입력하면 문제가 발생함. 인위적인 키를 사용하면 나중에 정정 가능함.
  • 자연 키의 통제 불가능성: 이름, 주소, 공식 등록 번호 등은 통제할 수 없기 때문에 신뢰할 수 없음. 고유 키 시스템을 사용해야 함.
  • 인위적인 키 사용: 모든 테이블에 고유 ID 필드를 사용하면 문제 해결이 쉬워짐. 데이터와 관계가 자주 변경되기 때문에 자연 키를 믿기 어려움.
  • 변경 가능성과 고유 ID: 변경 가능성은 시간에 걸쳐 공통된 식별자를 필요로 함. 데이터베이스는 명시적인 대리 키를 스키마에 포함해야 함.

인공키도 글로벌 리전 등에 대응하는 분산 환경에 대응 준비가 되어 있는 TSID를 사용하는 것을 추천합니다. 저는 MySQL, DynamoDB에서 PK로 TSID를 사용합니다.

https://jsonobject.hashnode.dev/using-tsid-as-database-pk