문제 상황
ABC 회사가 온라인 쇼핑몰을 운영하고 있습니다. 회사는 제품, 주문, 고객 정보를 관리하기 위해 데이터베이스를 사용하고 있습니다.
다음은 현재 데이터베이스에 존재하는 테이블의 스키마입니다.
제품 (products)
| 컬럼명 | 데이터 타입 | |——–|————| | id | int | | name | varchar | | price | int | | brand | varchar |
주문 (orders)
| 컬럼명 | 데이터 타입 | |————|————| | id | int | | customer_id| int | | product_id | int | | quantity | int | | order_date | date |
고객 (customers)
| 컬럼명 | 데이터 타입 | |————|————| | id | int | | name | varchar | | email | varchar | | phone | varchar | | address | varchar |
문제 해결
정규화 (Normalization)
현재 데이터베이스의 테이블은 몇 가지 정규형 규칙을 위반하고 있는 것으로 보입니다. 다음과 같은 정규화 과정을 거치세요.
- 첫 번째 정규형 (1NF): 모든 컬럼은 원자값(Atomic)을 가지도록 테이블을 분해합니다.
- 두 번째 정규형 (2NF): 부분 함수 종속성이 제거되도록 테이블을 분해합니다.
- 세 번째 정규형 (3NF): 이행 함수 종속성이 제거되도록 테이블을 분해합니다.
역정규화 (Denormalization)
역정규화를 통해 데이터 조회 시 성능을 향상시킬 수 있습니다. 다음과 같은 역정규화 과정을 거치세요.
- 제품 테이블(products)에 브랜드(brand) 컬럼을 추가합니다.
- 고객(customer) 테이블의 이름(name) 컬럼을 성(last_name)과 이름(first_name)으로 나누어 저장합니다.
정리
이상으로 데이터베이스 테이블 정규화와 역정규화 연습문제를 해결해보았습니다. 데이터베이스 설계 시 정규화를 통해 데이터 일관성과 중복을 최소화하고, 역정규화를 통해 성능을 향상시킬 수 있습니다.
#데이터베이스 #정규화 #역정규화