데이터베이스 정규화?
데이터베이스에는 정규화 이론이라는 DB설계 이론이 있습니다.
정규화 이론은 RDB (Relational Database)를 효율적으로 잘 다루는데에 있어서 꼭 필요하며
관계형 모델을전제로 구축된 DB설계 이론입니다.
2020/08/27 - [DB] - [DBMS] RDBMS와 DBMS의 차이점 / SQL이란?
[DBMS] RDBMS와 DBMS의 차이점 / SQL이란?
DBMS와 RDBMS의 개념 우리는 DBMS가 무엇인지 알고있습니다. 그렇다면 RDBMS는 무엇일까요? Relational Database Managenent System으로 쉽게 생각해 테이블 기반의 DBMS라고 생각하면 됩니다. DBMS와 RDBMS의 차..
runcoding.tistory.com
예를들어 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 |