데이터 모델의 중요한 요소 중의 하나가 엔티티(Entity)이다. 이와 같은 엔티티는 여러 가지 형태로 탄생되며 이와 같이 만들어진 엔티티에 의해 데이터베이스의 생명이 결정된다. 그렇기에 정보시스템을 구축함에 있어서 엔티티는 매우 중요한 역할을 하게 된다.
엔티티의 효과적인 구성은 데이터의 효과적인 구축과 동일하다고 할 수 있다. 엔티티의 종류는 매우 다양하게 존재하며, 이중 순환 엔티티는 특이한 형태를 가지게 된다.
이 글에서는 데이터 모델링에서 엔티티의 마지막인 순환 엔티티에 대해 확인해보자. 순환 엔티티는 엔티티가 다시 자신을 참조하는 형태다. 또한 엔티티의 특성을 좌우하는 속성(Attribute)의 개념에 대해서도 살펴본다.
순환 엔티티는 자기 자신을 참조하는 형태의 엔티티다. 실제 프로젝트에서는 일정 부분 사용되는 형태의 엔티티에 해당한다.
이와 같은 순환 엔티티는 쉽게 이야기하면 메뉴와 같다. 인터넷을 사용하다 보면 많은 사이트에서 1차 메뉴가 보이고 1차 메뉴 중 하나를 선택하면 그 밑에 2차 메뉴가 보이게 된다.
이와 같이 메뉴는 위아래가 존재하며 이는 순환 관계를 가지기 때문에 이와 같은 형태의 데이터를 데이터베이스 모델링 과정에서는 순환 엔티티라고 말하게 된다.
[그림1]의 예는 하나의 코드번호에 대해 해당 코드번호가 선택되면 그 밑에 존재하는 코드를 코드번호2 속성으로 구현한 것이다. 이와 같이 구현한다면 1차 메뉴와 2차 메뉴까지만 구현된다. 그렇기 때문에 이와 같이 순환 엔티티를 구현한다면 2차까지만 가능하며 3차까지 구현하고 싶다면 코드번호3 속성을 추가해야 한다.
결국 속성을 이용해 순환 엔티티를 구성한다면 유연성은 낮아지게 되며 순환의 단계가 속성의 개수에 의해 정해지므로 이를 제한적인 순환 엔티티라고 하게 된다.
앞서 언급한 순환 엔티티는 속성으로 구현하기 때문에 순환하고자 하는 개수가 제한적이었다. 그렇다면 무제한적인 순환 엔티티는 어떻게 구현해야 하는가?
[그림 2]의 예와 같이 엔티티가 속성으로 참조하는 것이 아니라 자신과 다시 관계를 가진다면 무제한적인 순환 엔티티의 구현이 가능해진다. 그렇게 된다면 부모와 자식 관계를 순환 전개에 의해 찾아가게 된다.
부모와 자식 관계를 찾고자 하는 경우에 순환 전개를 이용하면 순환 전개는 CONNECT BY … START WITH 구문을 사용하게 된다.
전자 제품을 구매할 때 제품 모델명이 매우 복잡하게 되어 있는 것을 볼 수 있다. 모델명은 고의적으로 복잡하게 한 것이 아니며 여러 가지 의미를 포함하게 된다. 이와 같은 방식을 이용해 순환 엔티티를 구성하는 것이다.
모든 순환 관계에 있는 CODE를 '-' 문자로 연결해서 하나의 속성에 저장하는 것이다. '-'문자가 아니라면 다른 문자를 이용해도 무방하다. 이와 같이 순환 엔티티를 구성하고 해당 값을 애플리케이션에서 분석해 사용하는 것이다.
이와 같이 순환 엔티티를 구성한다면 애플리케이션은 복잡해지며 데이터의 정합성 또한 위험해질 수 있다. 이 방법은 각각의 요소를 분석하지 않고 하나와 같이 사용할 경우에만 고려하길 바란다.
하나의 엔티티를 구성하는 데이터에 대한 최소 원자 단위를 속성이라고 한다. 여기서 언급하는 최소 단위인 원자는 업무적으로 의미 있는 단위를 뜻한다.
예를 들면 엔티티들의 속성을 도출하면서 가장 많이 도출되는 것이 YYYYMMDD 형태의 일자 속성이다. YYYYMMDD 형태의 속성은 업무 성격에 따라 하나의 속성이 될 수도 있으며 YYYY 속성, MM 속성 및 DD 속성으로 분리될 수 있다.
물론 업무 성격에 따라 YYYYMM 속성 및 DD 속성으로도 분리될 수 있다. 이와 같이 해당 속성을 구성하는 값들에 대해 업무적으로 어떻게 구성하는 것이 최소 단위의 원자가 되는가에 따라 속성의 구성은 달라진다.
다음 시간부터는 속성에 대해 더 자세히 살펴본다.
- 강좌 URL : http://www.gurubee.net/lecture/2751
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.