ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 7일차 - 관계 데이터 모델링: 실습
    CS지식/데이터베이스 2021. 4. 27. 23:34

    오늘은 저번시간에 배운 관계 데이터 모델링에 대한 이론을 바탕으로 실습을 해보는 시간을 가졌다.

    5일차 때는 요구사항명세서를 바탕으로 E-R다이어그램을 작성하는 실습을 해봤는데

    오늘은 E-R다이어그램을 바탕으로 릴레이션(릴레이션 스키마)를 작성해보는 시간을 가졌다.

    (지난 5일차 게시글: straw961030.tistory.com/26)

     

     

     

    1. 논리적 설계

    관계 데이터 모델링은 데이터베이스 설계 5단계 중 3단계에 해당하는 논리적 설계에서 이루어진다.

    논리적 설계의 목적은 DBMS에 적합한 논리적 스키마를 설계하고 개념적 스키마를 논리적 데이터 모델을 이용해 논리적 구조로 표현하는 것이다.

    논리적 설계의 결과물은 릴레이션 스키마이다.

    개념적 설계 단계의 결과물인 E-R다이어그램을 바탕으로 릴레이션 스키마를 작성하고 데이터 타입과 길이, 널 값 허용 여부, 기본 값, 제약조건 등을 세부적으로 결정하고 결과를 문서화시키는 작업이 이루어진다.

     

    E-R다이어그램을 릴레이션 스키마로 변환하는 데에는 규칙이 존재한다.

     

    규칙1: 모든 개체는 하나의 릴레이션으로 변환한다.

    개체의 이름은 릴레이션의 이름으로 개체의 속성은 릴레이션의 속성으로 개체의 키 속성은 릴레이션의 기본키로 변환된다.

    그리고 개체의 속성이 복합 속성인 경우에는 복합 속성을 구성하고 있는 단순 속성만 릴레이션의 속성으로 변환한다.

    예를 들어, 고객이라는 개체에 주소라는 속성이 존재하고 주소라는 속성은 우편주소, 도로명주소로 구성된 복합속성이라고 생각해보자.

    이러한 경우 고객이라는 릴레이션을 만든 후 속성에 주소를 넣는 것이 아니라 우편주소, 도로명주소로 단순 속성으로 넣어주어야한다.

     

    규칙2: 다대다(n:m)관계는 릴레이션으로 변환한다.

    관계의 이름은 릴레이션의 이름으로 관계의 속성은 릴레이션의 속성이 된다.

    관계를 이루고 있는 개체를 규칙 1에 따라 릴레이션으로 변환 후 이 릴레이션의 기본키를 관계 릴레이션에 포함시켜 외래키로 지정하고 외래키들을 조합하여 관계 릴레이션의 기본키로 지정한다.

     

    실습에서 사용한 것을 예시로 들어 설명해보겠다.

    고객이라는 개체와 상품이라는 개체가 다대다 관계로 주문이라는 관계를 이루고 있다. 다대다 관계이므로 주문이라는 릴레이션을 새로 생성한다.

    주문의 릴레이션의 속성에는 고객 릴레이션의 기본키와 상품 릴레이션의 기본키가 들어가게 되고 이 2개의 속성은 외래키가 된다. 그리고 이 2개의 속성을 묶어 기본키로 지정된다.

    (기본키는 여러 개의 속성으로 이루어진 집합으로도 설정 가능하다.)

     

    규칙3: 일대다(1:n)관계는 외래키로 표현한다.

    일반적인 일대다 관계는 외래키로 표현한다.

    일대다 관계에서 1측 개체 릴레이션의 기본키를 n측 개체 릴레이션에 포함시켜 외래키로 지정한다.

    관계의 속성들도 n측 개체 릴레이션에 포함시킨다.

    예를 들어 설명하면 학생이라는 개체와 지도교수라는 개체가 있고 이 개체들은 지도라는 관계로 연관되어 일대다 관계를 이룬다. (지도교수가 1측, 학생이 n측)

    이 경우에 지도라는 관계를 일대다 관계이므로 규칙 2처럼 별도의 릴레이션을 만드는 것이 아닌 외래키로 표현하는 것이다.

    즉, 지도교수 릴레이션이 교수ID를 기본키로 가지고 있다면 교수ID 속성을 학생 릴레이션에 추가하여 외래키로 지정하는 것이다.

     

    만약 약한 개체가 참여하는 일대단 관계라면, 외래키를 포함해서 기본키로 지정해주어야한다.

    이유는 약한 개체는 오너 개체에 따라 존재 여부가 결정되므로 오너 개체의 기본키를 이용해 식별해야하기 때문이다.

     

    규칙4: 일대일(1:1)관계는 외래키로 표현한다.

    일반적인 일대일 관계는 외래키를 서로 주고 받는다.

    관계에 참여하는 개체 릴레이션들이 서로의 기본키를 주고 받아 외래키로 지정하고 관계의 속성들도 모든 개체 릴레이션에 포함시킨다. 이렇게 표현을 할 경우에 불필요한 데이터가 중복될 수 있는 단점이 존재할 수 있다.

     

    만약 관계에 필수적으로 참여하는 개체가 존재한다면 필수적으로 참여하는 개체 릴레이션만 외래키로 받으면 된다.

    그리고 관계의 속성들도 필수적으로 참여하는 개체 릴레이션에 포함시킨다.

    예를 들어 남자라는 개체가 있고 여자라는 개체가 있고 혼인이라는 1대1관계를 이룬다고 생각해보자.

    현실에서는 혼인은 선택이지만 여기서는 남자라는 개체의 인스턴스들은 모두 필수로 혼인이라는 관계가 성립되었다고 생각해보자.

    이러한 경우에 여자 릴레이션에 남자 릴레이션의 기본키를 속성으로 추가하여 외래키로 가질 필요가 없어지고 관계의 속성도 포함시키지 않아도 된다.

    단, 필수적으로 참여하는 남자 릴레이션에 여자 릴레이션의 기본키를 외래키로 가지고 관계의 속성도 추가해야한다.

     

    만약 모든 개체가 필수적으로 참여한다면 릴레이션을 하나로 합친다.

    관계에 참여하는 개체 릴레이션들을 하나의 릴레이션으로 합쳐서 표현하고 관계의 이름을 릴레이션의 이름으로 사용하고 관계에 참여하는 개체의 속성들을 관계 릴레이션에 모두 포함시킨다.

    개체 릴레이션의 키 속성을 조합하여 관계 릴레이션의 기본키로 지정한다.

     

    규칙5: 다중 값 속성이 존재하는 경우에는 독립적인 릴레이션으로 변환한다.

    다중 값 속성과 함께 그 속성을 가지고 있던 개체 릴레이션의 기본키를 외래키로 가져와 새로운 릴레이션에 포함시킨다.

    이렇게 새롭게 생성된 릴레이션의 기본키는 다중 값 속성과 외래키를 조합하여 지정한다.

    댓글

Designed by Tistory.