각자 고유 한 ID 개체 목록이 있으며 데이터베이스에 대한 테이블을 만들어야합니다. 고유 한 ID를 테이블의 기본 키로 사용하는 것이 좋지만 한 가지 문제점이 있습니다. 모든 ID는 하나의 객체를 제외하고는 정수입니다. id는 140, 141, 142.1, 142.2, 143...
이므로 ID는 142.1
및 142.2
인 2 개의 하위 객체가 있습니다. 이제 기본 키의 유형으로 double을 선택하면 불필요한 6 바이트가 저장됩니다 (double은 8 바이트이고 INT
은 2입니다. 두 개의 이중 숫자 만 지원하기 때문에 INT
을 선택할 수 없습니다. 그렇다면 객체 목록을 변경할 수없는 경우 어떤 유형을 사용해야합니까?SQLServer가 기본 키 유형을 선택합니다.
0
A
답변
2
double
의 수학은 imprecise이므로 돈이나 오브젝트 ID와 같은 이산 숫자에는 사용하지 마십시오. 대신 decimal(p,s)
을 사용해보십시오. 여기서 p
은 전체 자릿수이고 s
은 점 뒤의 자릿수입니다. 예를 들어 decimal(5,2)
은 123.45
을 저장할 수 있지만 1234
또는 12.345
은 저장할 수 없습니다.
또 다른 옵션은 두 개의 정수 n1, n2
위한 복합 기본 키 :
alter table YourTable add constraint PK_YourTable primary key (n1, n2)
1
int
는 4 바이트가 아닌 두, 그래서 두 배의 크기 차이는 그렇게 크지 않다.
그러나 부동 소수점 숫자는 정확한 값으로 저장되지 않으므로 근사값으로 사용하면 안됩니다.
decimal
에 숫자 한 자릿수 (예 : decimal(5,1)
)를 사용하여 값을 저장할 수 있습니다. A decimal
은 고정 소수점 숫자이므로 근사치가 아닌 정확한 값으로 저장됩니다.
1
적절한 길이의 VARCHAR
을 선택하고 데이터가 도메인 규칙을 준수하는지 확인하려면 CHECK
제한으로 설정하십시오. 게시 한 작은 샘플 데이터를 기반으로 :
CREATE TABLE Ids
(
id VARCHAR(5) NOT NULL UNIQUE
CONSTRAINT id__pattern
CHECK (
id LIKE '[0-9][0-9][0-9]'
OR id LIKE '[0-9][0-9][0-9].[1-9]'
)
);
관련 문제
- 1. STL 맵은 삽입시 기본 유형을 초기화합니까?
- 2. 제네릭에 기본 유형을 어떻게 제공합니까?
- 3. 기본 유형을 파생 유형으로 변환
- 4. 기준을 사용하여 기본 유형을 얻으십시오
- 5. 데이터베이스의 기본 키 값을
- 6. ID 및 기본 키
- 7. 는 기본 키
- 8. SubSonic 기본 키 문제
- 9. mnesia 기본 키
- 10. 복합 기본 키 업데이트
- 11. 복합 기본 키 시나리오
- 12. 개인 테이블 기본 키
- 13. 공유 기본 키
- 14. 오라클의 기본 키 업데이트
- 15. 선택 기본 키
- 16. 복제를위한 정수 기본 키
- 17. 기본 키 정렬
- 18. symfony : 폼과 기본 키
- 19. Linq에 : 기본 키
- 20. Android : GUID 기본 키
- 21. 기본 키 값을 모호하게해야합니까?
- 22. 음수 기본 키
- 23. 이중 기본 키 디자인
- 24. Oracle 기본 키
- 25. 여러 개의 기본 키
- 26. AppEngine 기본 키
- 27. mysql에서 기본 키 삭제
- 28. PostgreSQL bytea 기본 키
- 29. 테이블의 기본 키 정보?
- 30. 방법 기본 키
좋지 않습니다. 논리를 기본 키에 넣으면 안됩니다. 하위 객체에 대한 정보는 별도의 열에 넣어야합니다. –
'int'는 4가 아닌 2입니다. ('smallint'는 2입니다.) –
지금 당장은 아무 것도 바꿀 수 없지만,이 문제를 해결할 필요가 있습니다. – Sergey