티스토리 뷰

데이터베이스

DB 분석 기본편

쌀맛나는세상 2007. 10. 1. 10:28

회사를 여러곳 들락 거리다 보니 정말 개판으로 설계한 곳도 많고. 나 또한 그랬던것 같다.

지식이 쌓일수록 예전의 설계들이 참 허접해 보인다.

자 이제 실무로 들어가 볼까?

우리가 흔히 말하는 테이블(entity)을 고찰해보자.

대용량 데이터베이스 솔류션 (이화식著)에 보면 KEY 엔터티, 핵심(main) 엔터티, 행위(action) 엔터티로 분류한다.

다른 이견들도 있을수 있으나 국내에선 최고의 권위자이니 그냥 그렇게 인식하도록 하자.

그렇다면 키 엔터티란 무엇인가?

데이터 설계시 키 엔터티를 잡는것은 건물의 골조를 세우는 것과 유사하다 할수 있다.
내 나름의 해석으로는 맨위의 조상격이 되는 원조가 될 듯 하다.

다음은 이화식 선생의 정의 비스무래이다.

  • 초기 모델링 단 계에서 키이 엔터티를 잘 정의해 두는 것은 무엇보다 중요하다. 기둥 이 정확히 똑바로 서있지 않으면 거기에 메달아서 만들어진 구조 물들은 모두 같이 불안정하게 된다. 또한 한창 내부 구조물을 세우다 가 기둥부터 조정하려면 엄청난 손실과 비용이 따르므로 이러한 핵심 부분을 대충 정의하고 넘어가서야 절대로 제대로 된 데이터 모델은 만들어 질 수가 없다.

    다음 메인 엔터티는??

    핵심 엔터티(=메인 엔터티)는 부모나 조상에 의하여 생겼으나 가지치기 (자식들)을 잘 둔 그런 엔터티가 아닐까 생각한다.

    건축으로 치자면 시멘트 붇고 양생 하는 거라고 할수 있지 않을까?

    다음은 이화식 선생의 정의 이다.
  • 핵심 엔터티란 앞서 설명했듯이 부모들에 의해 탄생된 엔터티이지만 해당 부 문의 Top에 위치한 엔터티를 말한다. 우리가 앞서 키이 엔터티를 정 확하게 정의해 두었기 때문에 이러한 엔터티가 어떤 부모들에 의해 서 만들어 지게 되었는 지를 밝혀내는 것은 별로 어렵지 않다. 핵심 엔터티는 앞으로 자세하게 밝혀 가야할 많은 엔터티들 의 조상들에 해당하기 때문에 확실히 도출하여 정확히 정의해 두는 것은 매우 중요하다. 킹; 엔터티와 핵심 엔터티는 건물의 골조에 해당한 다고 설명했듯이 기본 개념 데이터 모델링에서 제대로 된 골조를 정확하게 세우는 것에 대한 중요성은 굳이 언급할 필요 조차 없다. 여기서는 우리가 다음 단계에서 정확한 골조공사를 실시할 수 있도록 핵심 엔터티를 적절히 선별하는 예를 설명하도록 하겠으며 판단의 기준은 부모가 누구인지(개념적으로), 자식들을 거느리고 있을 것인 지에 대한 판단에 따라 핵심 엔터티를 분류한다.

    마지막으로 행위(action) 엔터티는 ?

    글세 나는 어디에 비유 할지 잘모르겠지만 일단 건축으로 치면 내부 장식 및 기타 잡다스런 일들을 하는것을 행위 엔터티라 생각한다.

    건축을 할때엔 기초 공정도 필요하지만 마지막 공정도 중요하여 마지막 공정이 잘 되지 않으면 건물의 멋이 없다.

    다음은 이화식 선생의 정의이다.

  • 앞서 행위 엔터 티는 '자손'에 비유했다. 현실을 살고 있는 자손들은 대개의 경우 그 아래 자손들을 많이 거느리고 있지 않다. 만약 많은 자손을 거 느리고 있다면 이미 핵심 엔터티로 승격되었을 것이고 나중에 판단되 었다면 그 때 가서 하위의 엔터티를 추가시켜 주면 되므로 너무 걱정 할 필요가 없다.
  • 우리가 앞서 키 이 엔터티와 핵심 엔터티를 추출하고 남은 엔터티는 행위 엔터티 로 보면 되므로 일일이 상세한 설명은 하지 않도록 하겠다. 다만 이 엔터티들은 과연 이렇게 분류하는 것이 올바른 지에 대한 판 단을 적절히 하는 것이 중요하며 만약 판단이 명확하지 않다면 사 용자의 의견을 정확히 파내어 자신이 판단한 결정에 확신을 가질 수 있도록 하는 것이 반드시 필요하다 하겠다.

    내나름 하나더 야그 하자면 관계 엔터티도 엔터티로 봐서는 안되자만 테이블 형태로 나온다.

    그리고 마지막으로 1:1 , M:M 관계는 무언가 데이터 설계의 오류가 있다고 보는것이 무방하다고 감히 생각한다.

    다음번 블록의 글엔 1:1, M:M 푸는 방법을 고찰해 볼란다.

    참고 url
    http://www.en-core.com/
    https://www.en-core.com/bin/main/module/help/view.asp?searchString=&column=&article_id=13253&state=view&board_id=know&page_num=1&group_id=13536&direction=n&step=0