반응형

데이터베이스 정규화?

데이터베이스에는 정규화 이론이라는 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를 효율적으로 잘 다룰 수 있게 되는것 입니다.

 

반응형

+ Recent posts