삽질의 현장/- .NET

#091_닷넷(.NET)_ ADO.NET - DB 모델링

shovelman 2015. 11. 19. 08:27


안녕하세요 삽잡이입니다.


이번 시간은 DataBase 설계

즉, 데이터 베이스 모델링에 대해서 알아보려고합니다.



DB 모델링은

DB가 규칙성있는 구조를 갖는 데이터 집합을 말합니다.

즉, 데이터 모델링이라는 것은 말 그대로 데이터를 모델화 하는 것이지요.


기존에 객체 지향개념에 입각하여

해결하고자하는 문제에 대해서 추상화를 사용합니다.


DB 모델을 만드는것 또한 추상화를 하는 것입니다.



DB 용어에서는 일반적으로, DB 테이블들을 Entity라고 부를 수 있습니다.

즉, 어떤 표현하고자하는 문제 내에서 모델을 가지고 와서

DB에 표현하면 하나의 Entity가 되는 것이지요.



우리는 사용자가 원하는 문제에 대해서 데이터 베이스로 표현할 수 있습니다.


그런데, 사용자의 요구사항을 DB 테이블로 표현하고자할 때

하나의 테이블로 사용하게 되면 편하지 않을까요?


사실, DB는 테이블이 적으면 적을 수록 프로그램하기 편합니다.

효율적인 것을 이야기하는 것이 아니라,

코드를 치는 것을 말하는 것입니다.


그런데, 예를 들어보겠습니다.

어떤 고객이 신발을 주문하는 상황을 표현하고자 합니다.


테이블을 쉽게 하나 지으면 끝! 아니겠습니까?


사실, 추상화에 대해서 언급을 했었는데,

하나의 개념에 충실해야지 테이블이 잡다하면 별로 좋지 않습니다.


우선 보시죠.


 


이렇게 하나의 테이블에 모든 정의가 있다고 해봅시다.


모두 다 해결됬습니다.

테이블로 모든 정보를 표현했죠.


그런데, 데이터가 굉장히 많아졌다고 가정해봅시다.

데이터가 중복이 굉장히 많을 수 있어서 메모리 낭비가 굉장합니다.

또한, 수정하기도 힘듭니다.

필드하나 추가하는데 테이블이 하나가 통째로 바뀌니 여간 고생이 예상됩니다.


또한, 지금은 사용자가 셋밖에 안되지만,

이 세명의 사용자를 찾는데 추려야합니다.

검색하는데도 비효율적이라는 것입니다.


테이블을 만들기는 쉬워도, 

관리하는 문제, 메모리 문제, 속도 및 성능에는 아주 치명적인 문제를 가지게 된다 이겁니다.


같은 내용에 대해서 정렬해보면 겹치는 내용들이 아주 많다는 것을 알 수 있습니다.

따라서, 중복데이터를 별도로 빼낼 수 있겠다는 Idea가 떠오릅니다.


중복되는 필드들을 떼어버리기로 합시다.



중복데이터를 따로 뺐습니다.

따라서, 각각의 테이블 별로 추상화를 잘 시킬 수 있게 됬습니다.


이렇게 떼어놓으면 기존에 있던 각 테이블에 대한 필드들도 필요가 없어집니다.

전체적인 정보를 알 필요없이,

신발에 대한 정보, 고객에 대한 정보라는 한 필드씩만 알게 되면 됩니다.



고객 ID와 신발 ID는 

각각의 분류한 테이블의 특정 필드를 참조하고 있습니다.


이 겹치지 않는 고유한 필드

즉, Uniqe하고, 읽기만 가능한 속성이고, null이 없는 이 고유한 필드!

이를 바로, 'Primary Key'라고 부릅니다.


그리고 내 테이블의 Primary Key가 아니라,

다른 Primary Key를 가지고 있는 열을 바로 Foreign Key라고 부르지요.


다른 테이블의 Primary Key를 가지면,

현재 테이블의 열은 Foreign Key가 되는 것입니다.

따라서, 속성은 필드에 붙게 됩니다.


이렇게 똑같은 데이터 중복을 피하고, 검색 및 정보 추가가 용이하도록

효율적으로 표현할 수 있게 됬습니다.


Primary Key가 있는 이유는 해싱 즉, 색인 작업을 하기 위해서입니다.

Primary Keyt가 없어도 문제가 생기지는 않지만... 권장 사항입니다.


또한, 해시 공부를 해보셨으면 아시겠지만 금방 찾을 수 있지요.

따라서, 위의 예제도 보시면 Primary Key를 임의적으로 만들었습니다.

즉, 구분할 수 있는 열을 만들었다 이겁니다.



결과적으로 이러한 관계를 가진 DB 모델을 구축할 수 있게 된 것입니다.


화살표를 쏘는 녀석이 자식 테이블이 될 것이고,

받는 녀석이 부모 테이블이 되겠지요.


이번시간은 여기까지 하도록 하겠습니다.


이상 삽잡이였습니다!