삭제 된 행의 기본 키 값을 재사용 할 기본 키 인덱스 디자인을 고려하고 있습니다 (가장 극단적 인 경우 초 이내).이 경우 가장 효율적인 디자인입니다.기본 키 값을 안전하지 않게 재사용하고 있습니까?
그러나 버그 및 보안 결함이 발생할 수 있습니다. 클라이언트는 여전히 삭제 된 레코드에 대한 이전 키 값을 가질 수 있습니다. 해당 키에 대한 요청은 다른 사용자와 동일한 사용자가 소유 한 행을 반환 할 수 있습니다. 응용 프로그램이 얼마나 잘 작성되었는지에 따라 혼란이 계속 될 수 있습니다.
보안 허점이 없어야합니다. 응용 프로그램이 다른 사용자가 소유 한 행에 대한 액세스 권한을 부여하면 어떤 상황에서도 응용 프로그램이 올바르지 않습니다. 그러나 이로 인해 결함을보다 쉽게 보거나 악용 할 수 있습니다. 내 마음에 큰 문제는 행이 동일한 사용자에 속할 수 있으며 클라이언트가 생각하는 행이 아니기 때문에 응용 프로그램이 예상치 못한 방식으로 작동 할 수 있다는 것입니다.
행에 재사용 카운터를 추가하여 1 바이트 비용으로 약간 줄일 수 있습니다. 삭제 후 기본 키 값이 다시 사용될 때 증가됩니다. 그 카운터를 기본 키의 일부로 만들 것입니다. 이제 재사용 카운터가 일치하면 실수로 행에 액세스 할 수 있습니다. 단 256 번의 재사용을 한 번만 할 수 있습니다. 이 버그는 여전히 가능하며 사용자가 행에 액세스해야하는 경우 적절한 검사를 대체하지는 않지만 적어도 실수로 잘못된 행에 액세스하는 것을 막을 수는 있습니다.
생각하십니까?
일반적인 SQL 데이터베이스는 아니지만 사용자 지정 데이터베이스 용이지만 원리는 직각입니다.
기본 키를 다시 사용하는 것과 같은 문제를 일으킬 수 있다는 것을 알게 된 이유는 무엇입니까?그냥 다른 값을 지정하십시오. 정수를 사용하는 경우 세계에 많은 정수가 있습니다. 당신은 아마 어떤 종류의 "압축 (compaction)"을 원하지만, 그것은 조숙 한 최적화를 제안 할뿐입니다. –
기본 키의 목적은 레코드를 고유하게 식별하는 것입니다. 키를 재사용하자마자 전제를 파괴했습니다. 대신 자연 키를 사용하는 것이 좋습니다. – PhillipXT
메모리를 절약하고 훨씬 효율적이기 때문입니다. 이것은 조기 최적화가 아닙니다. 항상 특정 테이블에 대해 중요하다면 재사용되지 않는 보조 키를 추가 할 수 있지만 일반적인 경우에는 재사용 카운터로 충분하다고 생각합니다. – Eloff