일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 파이썬
- intelij spring config
- BindingResult
- spring
- 편향된 지수
- 오블완
- 백준
- JPA
- 기본키 전략
- compgen
- 컴파일 타임 상수
- 은행원알고리즘
- 리눅스
- @Autowired
- 무한정 대기
- 커밋 되돌리기
- Git
- 프로그래머스
- m:n
- allocationSize
- 티스토리챌린지
- @SubscribeMapping
- 런타임 상수
- 알고리즘
- DTO
- 쉘 스크립트
- JDBC
- API
- 쿠키
- application layer
- Today
- Total
둘셋 개발!
[RDBMS] Primary Key의 조건, Primary Key를 설정할 때 고민이 필요한 부분 본문
✔️ Primary Key 의 조건
- NOT NULL
- UNIQUE
한 컬럼을 key로 설정할 수 있으려면 그 값이 비어있지않고 무조건 존재해야 하며(NOT NULL), 유일무이(UNIQUE) 해야한다.
만약 NOT NULL조건이 빠지면 Key는 될 수 없지만 후보 Key는 가능하다.
여기서 후보 키는 primary key가 될 가능성이 있는 key를 말한다.
예로는 주민번호, 이메일, 핸드폰 번호가 있다.
사람마다 주민번호, 이메일 , 핸드폰 번호가 다 다르지만, 이메일을 쓰지 않는 사람이 있을 수 있고 핸드폰이 없는 사람들이 있을 수 있기 때문에 값이 없을 수 있어 not null 조건을 만족시키지 못해 후보키가 된다.
(key를 설정하고 난 후에는 인덱스 테이블이 만들어 지는데, 이는 key를 빨리 찾기 위해 만들어 지는 것이다.)
✔️ Primary Key를 설정할 때 고민해야 될 부분
1. Primary Key로 지정할 컬럼 찾기
- NOT NULL 이면서 UNIQUE한 컬럼을 찾는다
- 만약 없을 경우 인조 식별자를 생성한다.
사실 인조 식별자를 생성하는 경우가 훨씬 많다.
인조 식별자는 데이터 베이스 내에서 레코드가 추가되면 자동으로 숫자가 증가하면서 부여하는 PK를 말한다.
2. 데이터 타입을 결정
발생 가능한 최대 레코드 수를 가늠하며 데이터 타입을 결정해야 한다.
1년에 몇 개의 레코드가 발생하는지, 한 달에 몇 개 정도의 레코드가 발생하는지 등의 질문 등을 통해 결정할 수 있다.
만약 하루에 약 10만개의 레코드 발생한다면 int (4바이트)(약 21억)를 사용하는 것이 적절하다고 판단한다. 하지만 하루만 사용하고 말 서비스가 아니라 몇 년, 몇 십년 동안 진행해야 할 서비스라면 턱 없이 부족하다.
그럴 때에는 연도, 월, Sequence를 한 묶음으로 PK라고 하면 UNIQUE조건을 만족하면서 발생하는 레코드들을 충분히 커버할 수 있다.
(참고: 인프런 - RDBMS Modeling 기초 강의)
'데이터베이스' 카테고리의 다른 글
[RDBMS] M:N 테이블 설계 (특징, 예시, 테이블 설계 시 고려할 점) (0) | 2023.03.19 |
---|---|
[RDBMS] 1:M 테이블 설계 시 고려할 점 (정의, 고려할 점, 재귀적 관계) (0) | 2023.03.19 |
database server 이해 (1) | 2021.11.08 |
관계형 데이터베이스란? (1) | 2021.11.03 |
SQL의 insert, select , update, delete 구문 (0) | 2021.11.03 |