VARCHAR을 프라이머리 키로 사용할 수 있습니까?
쿠폰/할인 저장 테이블이 있는데 기본 키인 coupon_code 열을 사용하고 싶습니다.VARCHAR
.
내 근거는 쿠폰마다 고유한 코드가 있고 내가 실행하는 명령어는SELECT ... FROM ... WHERE coupon_code='..'
조인이나 인덱스를 작성하지 않습니다.또한 이 테이블에는 수백 개 이상의 엔트리가 존재하지 않습니다.
이 정도면 괜찮을 것 같습니다만, 뭔가 놓치고 있는/생각하지 않는 것이 있는지 모르겠습니다.
물론 가능합니다.RDBMS를 사용하면 가능하기 때문입니다.그러나 실행 여부를 묻는 질문에 대한 답변은 다릅니다.대부분의 경우 데이터베이스 시스템 이외의 의미를 갖는 값을 프라이머리 키로 선택하지 마십시오.
값이 모델링 중인 시스템에서 고유하다는 것을 알고 있는 경우 테이블에 고유 인덱스 또는 고유 구속조건을 추가하는 것이 적절합니다.단, 프라이머리 키는 보통 자동증가수나 GUID 등 '의미없는' 값이어야 합니다.
그 이유는 간단합니다. 데이터 입력 오류와 변경할 수 없는 것처럼 보이는 변경 사항이 자주 발생합니다.프라이머리 키로 사용되는 값을 고정하는 것은 매우 어려워집니다.
"안 돼"라는 담요는 끔찍한 충고입니다.이는 사용 사례, 워크로드, 데이터 엔트로피, 하드웨어 등에 따라 많은 상황에서 완벽하게 합리적입니다.네가 해서는 안 되는 것은 추측하는 것이다.
MySQL의 인덱싱을 제한하는 접두사를 지정할 수 있으므로 나머지 항목을 검색하기 전에 결과를 좁히는 데 도움이 됩니다.다만, 프리픽스가 「풀업」되어 일의성이 떨어지기 때문에, 시간이 지남에 따라, 이 방법은 유용성이 저하될 가능성이 있습니다.
매우 간단한 작업입니다. 예:
CREATE TABLE IF NOT EXISTS `foo` (
`id` varchar(128),
PRIMARY KEY (`id`(4))
)
또, 프리픽스는(4)
는 컬럼 따옴표 뒤에 표시됩니다.어디서?4
즉, 128개의 가능한 문자 중 첫 번째 4글자를 사용할 수 있습니다.id
.
마지막으로 인덱스 프리픽스의 기능과 그 제한 사항을 읽고 나서 사용할 필요가 있습니다.https://dev.mysql.com/doc/refman/8.0/en/create-index.html
특정 사용 사례에 따라 다릅니다.
테이블이 스태틱하고 값 목록이 짧은 경우(DB 수명 동안 이 값이 변경될 가능성이 적음)에는 다음 구성을 권장합니다.
CREATE TABLE Foo
(
FooCode VARCHAR(16), -- short code or shortcut, but with some meaning.
Name NVARCHAR(128), -- full name of entity, can be used as fallback in case when your localization for some language doesn't exist
LocalizationCode AS ('Foo.' + FooCode) -- This could be a code for your localization table...
)
물론 테이블이 전혀 정적이지 않은 경우에는 INT를 프라이머리 키로 사용하는 것이 최선의 해결책입니다.
확실히 괜찮아요.몇 백 개만 입력해도 빠릅니다.
고유 ID를 기본 키(int auto increment)로 추가하고 coupon_code를 고유 키로 설정할 수 있습니다.따라서 다른 테이블에서 요청을 수행해야 할 경우 varchar보다 int를 사용하는 것이 좋습니다.
언급URL : https://stackoverflow.com/questions/19299874/can-i-use-varchar-as-the-primary-key
'programing' 카테고리의 다른 글
PHP에서 어레이 키로 사용되는 숫자 문자열 (0) | 2022.10.15 |
---|---|
MySQL 커넥터/C++(Maria 포함)DB (0) | 2022.10.15 |
vue js에서 기본 날짜를 설정하는 방법 (0) | 2022.10.15 |
Javascript call() & apply() vs bind()? (0) | 2022.10.15 |
비활성화 버튼에서 부트스트랩 툴팁을 활성화하는 방법 (0) | 2022.10.15 |