Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 파이썬 #python #class #클래스 #상속
- jsonb
- 파이썬 #python #함수 #function
- 파이썬 #python #가변매개변수 #키워드가변매개변수 #args #kwargs
- 파이썬 #python #전역변수 #지역변수 #eval
- 파이썬 #python #filter #map #reduce
- aw3
- 파이썬 #python #file #i/o #input #output
- 민감 정보 관리
- 파이썬 #python #enumerate
- Git
- 프로그래머스
- 파이썬 #python #os #os.path #glob
- 파이썬 #python #Comprehension
- PostgreSQL
- 약수 수하기
- redis
- 파이썬 #python #예외처리 #exception
- aws
- spring boot
- 배포
- 파이썬 #python #lambda #람다
- 파이썬기본문법 #파이썬 #python
- 연산자메서드
- docker
- 파이썬 #python #지역함수
- EC2
- 파이썬 #python #모듈 #module #import #random #time #calendar #sys
- 사용자정의예외
- 파이썬 #python #docstring
Archives
- Today
- Total
Yeonnnnny
[1과목] 1-10. 본질식별자 본문
■ 식별자 구분 (by 대체 여부)
1. 본질식별자
- 업무에 의해 만들어지는 식별자(꼭 필요한 식별자)
2. 인조식별자
- 인위적으로 만들어지는 식별자 (꼭 필요하지 않지만 관리의 편의성 등의 이유로 인위적으로 만들어지는 식별자)
- 본질식별자가 복잡한 구성을 가질 때 인위적으로 생성
- 주로 각 행을 구분하기 위한 기본키로 사용되며 자동으로 증가하는 일련번호같은 형태임
ex) 주문과 주문상세에 대한 엔터티 설계과정
- 주문이 들어오면 주문 엔터티에는 (주문번호+고객번호)를 저장. 이때 PK는 주문번호임
- 주문이력에는 각 주문별로 어떤 상품이 언제, 몇개 주문됐는지 등을 기록함
- ※ 주문상세 테이블 설계시 다음과 같은 식별자를 고려할 수 있음
- PK : 주문번호+상품번호로 설계
- 주문을 하면 주문번호와 상품번호가 필요하므로 본질식별자(주문번호+상품번호)가 됨
- 하지만 PK가 주문번호+상품번호이면 하나의 주문번호로 같은 상품의 주문 결과를 저장할 수 없게 됨
- 실제로 쇼핑을 하다보면 동일한 장바구니에 A 상품을 5개 주문했는데, 뒤에 또 다시 상품을 3개 추가로 주문하기도 함
- PK : 주문번호+주문순번 (주문순번이라는 컬럼을 생성)
- 하나의 주문에 여러 상품에 대한 주문 결과 저장 가능 → 주문순번으로 인해 구분
-
- 매 주문마다 동일한 상품 주문 시 주문순번을 정하기 위해 상품의 주문 횟수를 세야 한다는 점이 매우 불편. 즉, 사과를 총 3번 구매하였으니 주문순번은 1,2,3 순서대로 입력되어야 함
- PK : 주문상세번호(인조식별자 생성)
- 주문상세번호로 각 주문이력을 구분하기 때문에 같은 주문번호의 같은 상품이력이 저장될 수 있음
- 주문상세번호만이 주식별자이므로 나머지 정보들이 불필요하게 중복 저장될 위험 발생
- 실제 업무와 상관없는 주문상세번호를 주식별자로 생성하면 쓸모없는 index가 생성됨(PK 생성 시 자동 unique index 생성)
- PK : 주문번호+상품번호로 설계
※ 따라서 인조식별자는 다음의 단점을 가지게 됨
- 중복 데이터 발생 가능성 → 데이터 품질 저하
- 불필요한 인덱스 생성 → 저장공간 낭비 및 DML 성능 저하
※ 인덱스는 원래 조회 성능을 향상시키기 위한 객체이며, 인덱스는 DML(INSERT/UPDATE/DELETE)시 INDEX SPLIT 현상으로 인해 성능이 저하됨.
'SQLD' 카테고리의 다른 글
[2과목] 2-2. SELECT문 (1) | 2024.03.05 |
---|---|
[2과목] 2-1. 관계형 데이터 베이스 개요 (0) | 2024.03.05 |
[1과목] 1-9. null 속성의 이해 (0) | 2024.03.04 |
[1과목] 1-8. 모델이 표현하는 트랜잭션의 이해 (0) | 2024.03.04 |
[1과목] 1-7. 관계와 조인의 이해 (0) | 2024.03.04 |