정규화(Normalization): 데이터를 효율적으로 구성하기
데이터를 별도의 관련된 테이블로 구성하는 과정을 정규화(Normalization) 라고 합니다. 정규화는 다음과 같은 목적을 가진 일련의 규칙(정규형, Normal Forms)을 따릅니다:
- 중복된 데이터 제거
- 데이터 종속성의 논리적 정합성 확보
- 데이터베이스를 더 유연하고 효율적이며 확장 가능하게 만들기
이 장에서는 정규화에 대해 깊이 다루지는 않지만, 핵심 원칙은 데이터를 논리적인 테이블로 나누고 이들 간의 관계를 정의하는 것입니다. 즉, 모든 데이터를 하나의 거대한 테이블에 넣는 대신 관련된 항목들을 나누어 저장하는 것이죠.
이는 복잡한 Excel 워크북을 각각의 목적에 따라 여러 시트로 나누는 방식과 유사합니다. 하나의 시트에 모든 정보를 몰아넣는 것보다 훨씬 체계적입니다.
Excel에서 관계형 데이터베이스로: 실용적인 예시
이제 Excel 워크북을 관계형 데이터베이스로 변환하는 실용적인 예제를 살펴보겠습니다.
작은 비즈니스를 위한 Excel 워크북이 있고, 다음과 같은 시트들이 있다고 가정해 봅시다:
- Customers: 고객 연락처 정보
- Products: 제품 정보 및 가격
- Orders: 주문 정보 (고객 및 제품 포함)
Orders 시트는 다음과 같을 수 있습니다:
Order ID | Date | Customer Name | Customer Email | Product | Quantity | Price | Total |
---|---|---|---|---|---|---|---|
1001 | 1/15/2025 | John Smith | john@example.com | Laptop | 1 | $999.99 | $999.99 |
1002 | 1/16/2025 | Sarah Jones | sarah@example.com | Mouse | 2 | $24.99 | $49.98 |
1003 | 1/16/2025 | John Smith | john@example.com | Monitor | 1 | $249.99 | $249.99 |
이 Excel 데이터를 관계형 데이터베이스로 변환하려면 다음과 같은 단계를 따릅니다:
- 엔터티(Entities) 식별하기 (주요 객체): Customers, Products, Orders
- 각 엔터티에 대해 별도의 테이블 생성 및 적절한 컬럼 정의
- 각 테이블에 Primary Key 설정
- Foreign Key를 사용하여 테이블 간 관계 설정
결과적으로 다음과 같은 데이터베이스 설계가 됩니다:
Customers Table:
Customer_ID (PK) | Name | Phone | |
---|---|---|---|
C001 | John Smith | john@example.com | 555-1234 |
C002 | Sarah Jones | sarah@example.com | 555-5678 |
Products Table:
Product_ID (PK) | Name | Description | Price |
---|---|---|---|
P001 | Laptop | 15" Notebook Computer | $999.99 |
P002 | Mouse | Wireless Mouse | $24.99 |
P003 | Monitor | 24" HD Monitor | $249.99 |
Orders Table:
Order_ID (PK) | Date | Customer_ID (FK) |
---|---|---|
1001 | 1/15/2025 | C001 |
1002 | 1/16/2025 | C002 |
1003 | 1/16/2025 | C001 |
Order_Items Table:
Order_Item_ID (PK) | Order_ID (FK) | Product_ID (FK) | Quantity | Price |
---|---|---|---|---|
OI001 | 1001 | P001 | 1 | $999.99 |
OI002 | 1002 | P002 | 2 | $24.99 |
OI003 | 1003 | P003 | 1 | $249.99 |
여기서 주목할 점은 원래 Excel에는 없던 Order_Items라는 새로운 테이블이 추가되었다는 것입니다. 이는 하나의 주문에 여러 개의 제품이 포함될 수 있기 때문에 Orders와 Products 간의 다대다(Many-to-Many) 관계를 나타내기 위해 **중간 테이블(Junction Table)**이 필요한 구조입니다.
결론
관계형 데이터베이스는 데이터를 별개의 테이블로 나누고, Primary Key와 Foreign Key를 통해 이들 간의 관계를 설정합니다. 이 구조는 데이터의 중복을 제거하고, 무결성을 향상시키며, 데이터를 더 유연하게 조회하고 분석할 수 있도록 해줍니다.
Excel에 익숙하다면, 관계형 데이터베이스를 여러 개의 시트로 구성된 워크북이라고 생각하면 됩니다. 단, VLOOKUP 대신 데이터베이스는 JOIN을 통해 자동으로 관계를 처리해줍니다.
이제 앞으로 이 책에서는 관계형 데이터베이스와 상호작용하는 방법, 즉 SQL을 통해 데이터를 질의하고 조작하는 방법을 배워나갈 것입니다. SQL의 많은 개념들이 Excel과 유사한 점이 있어서, 여러분은 예상보다 훨씬 쉽게 전환할 수 있을 것입니다.