데이터베이스 정규화?
데이터베이스에는 정규화 이론이라는 DB설계 이론이 있습니다.
정규화 이론은 RDB (Relational Database)를 효율적으로 잘 다루는데에 있어서 꼭 필요하며
관계형 모델을전제로 구축된 DB설계 이론입니다.
2020/08/27 - [DB] - [DBMS] RDBMS와 DBMS의 차이점 / SQL이란?
예를들어 RPG게임을 바탕으로 설명을 드리도록 할게요.
PlayerID | name | class | level | inventory |
321331 | 런코딩 | 암살자 | 132 | 부패의 물약*5 , 처형인의 대검 , 무한의 대검, 천갑옷, 신속의 장화 |
321332 | 런코딩 부캐 | 사제 | 77 | 불타는 향로, 미카엘의 도가니, 부패의 물약*3, 구원 |
RPG게임에 일부분이라고 가정해봅시다. 이렇게 인벤토리라는 컬럼을 만들고 그 안에 모든 아이템을 때려박는다면
어떨까요?
위 테이블처럼 인벤토리에 모든 보유 아이템을 1개의 컬럼에 때려박는다면, 그리고 그러한 플레이어들이 100만 명 가까이 있다면, 우리는 playerID를 통해 해당 ROW를 찾고 그 ROW안에서 Inventory컬럼안에 있는 내용들을 전부다
스트링으로 받아온 뒤, ,(쉼표) 를 통하여 아이템들을 나누고 등등 해야할 일들이 정말 많을것 입니다.
상당히 비효율적이게 되는것이죠.
우리는 정규화를 기준으로 이를 어떻게 바꿀 수 있을까요?
1차원 적으로 생각해본다면
PlayerID | name | class | level | Itemcode | itemname | itemcount |
321331 | 런코딩 | 암살자 | 132 | 13 | 부패의 물약 | 5 |
321331 | 런코딩 | 암살자 | 132 | 17 | 처형인의 대검 | 1 |
321331 | 런코딩 | 암살자 | 132 | 21 | 무한의 대검 | 1 |
321331 | 런코딩 | 암살자 | 132 | 24 | 천갑옷 | 1 |
321331 | 런코딩 | 암살자 | 132 | 26 | 신속의 장화 | 1 |
321332 | 런코딩 부캐 | 사제 | 77 | 31 | 불타는 향로 | 1 |
321332 | 런코딩 부캐 | 사제 | 77 | 11 | 미카엘의 도가니 | 1 |
321332 | 런코딩 부캐 | 사제 | 77 | 13 | 부패의 물약 | 3 |
321332 | 런코딩 부캐 | 사제 | 77 | 66 | 구원 | 1 |
이런식으로 바꿀 수 있습니다.
근데 이렇게 모든 아이템들을 따로 나누고 나니.. 중복된 데이터들이 상당히 많습니다.
PlayerID부터 level까지 여러개의 레코드들이 중복됩니다.
이를 해소하기 위해서는 테이블을 여러개로 나누고 각각 primary key와 foreign key를 활용해서 관계형 데이터베이스를 작성할 수 있습니다.
PlayerID | name | class | level |
321331 | 런코딩 | 암살자 | 132 |
321332 | 런코딩 부캐 | 사제 | 77 |
PlayerID | Itemcode | itemcount |
321331 | 13 | 5 |
321331 | 17 | 1 |
321331 | 21 | 1 |
321331 | 24 | 1 |
321331 | 26 | 1 |
321332 | 31 | 1 |
321332 | 11 | 1 |
321332 | 13 | 3 |
321332 | 66 | 1 |
itemcode | itemname |
13 | 부패의 물약 |
17 | 처형인의 대검 |
21 | 무한의 대검 |
24 | 천갑옷 |
26 | 신속의장화 |
31 | 불타는향로 |
11 | 미카엘의 도가니 |
66 | 구원 |
이렇게 3개의 테이블로나누게되면 비로소 RDB를 효율적으로 잘 다룰 수 있게 되는것 입니다.
'DB' 카테고리의 다른 글
[DB] 데이터베이스 합집합(UNION) , 교집합 (INTERSECT) 사용방법 (0) | 2020.09.15 |
---|---|
[DB] SQL Constraint란? (0) | 2020.09.02 |
[DB] Index의 의미와 장단점 (0) | 2020.09.02 |
[DB] Trigger 트리거 개요 및 장단점 (0) | 2020.09.01 |
[DB] Procedure 프로시저 개요 및 장단점 (1) | 2020.09.01 |