표준 SQL 데이터베이스를 사용하는 것에 다소 새로운 (현재는 주로 MySQL로 작업) 나는 아직 까지이 사용법을 많이 사용하지 않았습니다.
테이블을 색인화하는 음수 (또는 서명 된) 키를 갖는 것이 언제, 왜 유용한가요?
표준 SQL 데이터베이스를 사용하는 것에 다소 새로운 (현재는 주로 MySQL로 작업) 나는 아직 까지이 사용법을 많이 사용하지 않았습니다.
테이블을 색인화하는 음수 (또는 서명 된) 키를 갖는 것이 언제, 왜 유용한가요?
답변:
모든 기본 키는 우리가 결정한 값은 레코드에서 가장 중요한 값입니다. 해당 키가 부호있는 정수, 부호없는 정수, 문자열, 얼룩 (실제로 한계가 있음) 또는 UUID (또는 오늘날 사용되는 이름)이든, 사실은 여전히 열쇠이며 열쇠라는 것을 의미합니다. 가장 중요한 것.
우리는 키에 양의 방향 숫자 만 사용하도록 제한되어 있지 않기 때문에 부호가있는 int는 ~ 20 억에 불과하고 unsigned int는 ~ 40 억에 이르는 것을 고려하는 것이 합리적입니다. 그러나 signed int를 사용하여 초기 값을 ~-20 억으로 설정하고 1 씩 증가시키는 것은 아무런 문제가 없습니다. ~ 20 억 개의 레코드를 기록하면 "0"에 도달 한 다음 ~ 20 억까지 계속됩니다.
테이블에 "음수 키"를 갖는 것이 왜 유용한 지에 대해서는 "테이블에 키를 갖는 것이 왜 도움이 되는가"와 같은 질문입니다. 키의 "값"은 키 상태에 영향을 미치지 않습니다. 키는 키입니다.
중요한 것은 키가 유효한지입니다.
음수 키를 허용하는 것이 유용한 이유에 대해서는 몇 가지 이유를 제안 할 수 있습니다.
판매 시스템에서 반품을 음수 판매 주문 번호로 표시하고 양수 판매 주문 번호와 일치하여 상관 관계를 쉽게 만들 수있는 경우 (이것은 순진하고 제대로 설계되지 않았지만 "스프레드 시트"의미로 작동합니다).
users 테이블을 원하고 음수가있는 테이블이 시스템 제어됨을 표시하는 경우 (SO는 채팅 피드 사용자의 경우이 작업을 수행함)
나는 계속할 수 있지만 실제로 숫자가 음수 인 것이 중요한 유일한 이유는 당신이나 내가 그것에 중요성을 부여하는 것입니다. 그 외에도, 키의 가치가 키 자체에 영향을 미치는 큰 이유는 없습니다.
ID 또는 자동 번호 열을 사용하는 경우 값 자체에는 의미가 없습니다. (때때로, 내가 전에 한 drachenstern에 의해 승인 된 SO의 채팅 사용자에 따라)
그러나 부호있는 정수를 사용하면 일반적으로 범위의 절반이 손실됩니다.
참조 : 테이블의 필드가 최대 부호있는 또는 부호없는 32 비트 정수에 접근하면 어떻게해야합니까?
다른 예 : 소규모 복제 시나리오에서 한 사이트에 음수 값을 사용하고 다른 사이트에 양수 값을 사용하면 주어진 행의 소스에 대한 암시 적 지식이 제공됩니다.
NOT FOR REPLICATION
당신이 알고 있는 MySQL (또는 다른) 아날로그가 있습니까?
모든 데이터베이스 시스템이 부호없는 정수 유형을 지원하는 것은 아니며 MSSQL은 그렇지 않은 유형 중 하나입니다. 이러한 경우 정수 키 필드에서 음수 값은 유형에서만 가능하기 때문에 가능합니다 ( 이 예에 표시된대로 규칙 또는 트리거를 사용하여 차단할 수 는 있지만 이러한 규칙을 적용하기위한 오버 헤드를 추가 할 필요는 없습니다). 모든 인터 / 업데이트).
데이터베이스와 관련하여 기본 키의 실제 값은 테이블 내에서 고유 한 한 중요하지 않습니다. 그것에 -42와 42는 42와 69와 같은 방식으로 두 개의 다른 숫자입니다-의미는 코드에 의해 음의 값에만 부여되거나 가치에 의해 부여되지 않습니다.
부호없는 정수 유형을 지원하지 않는 것은 아마도 복잡성을 줄이는 것에 기반한 디자인 결정 일 것입니다. 즉, 두 개의 다른 32 비트 정수 유형이 값을 할당 할 때 범위를 확인하는 것을 걱정하지 않기를 바랍니다. 서명이없는 유형 (~ 4e9가 아닌 ~ 2e9)에서 가능한 것의 0 또는 1에서 절반으로 시작하는 자동 증분 필드에서 가능한 색인 수를 제한하지는 않지만 중요한 문제는 거의 없습니다 (필요한 경우) 전체 범위를 원하고 필요로 할 경우 32 비트 아키텍처보다 효율적으로 처리되지 않는 64 비트 아키텍처를 사용하는 경우 특히 64 비트 유형에 대해 그 규모의 많은 주요 값을 사용했을 것입니다. 공간상의 이유로 32 비트를 고수하려면 -2,147,483,647에서 증가를 시작할 수 있습니다.