관계형 모델은 DB를 어떻게 바꾸었을까?

    MIT OpenCourseWare의 <Database System> 강의 자료와 과제를 수행하면서 공부하고 고민한 내용들을 정리합니다.

    우선은 제가 이해한 만큼 정리하고 공부를 계속해 나가면서 수정할 예정입니다. 읽으시면서 잘못된 부분들은 언제든지 지적해 주세요!

     

    관계형 모델 이전의 데이터베이스

    관계형 모델이 등장하기 전의 데이터베이스는 계층형(hierachical) 모델을 기반으로 했다. IMS는 계층형 모델의 대표주자로, 트리 구조로 데이터를 저장한다. 이 과정에서 필연적으로 데이터의 중복이 발생하게 된다. 예를 들어서 

     

         사육사

             |

     우리(Cage)

             |

          동물

     

    와 같은 구조의 데이터베이스가 있다면 같은 우리를 공유하지만 사육사가 다른 동물의 경우에는 우리에 관한 데이터는 사실상 중복되게 된다. 또한 IMS의 트리 구조로는 Parent를 복수로 둘 수 없기 때문에 아래와 같은 구조의 데이터베이스를 표현하는 데에도 제약이 따른다.

     

    사육사    우리

      |_______|

          |

       동물

     

    또한 이 계층형 모델에서는 데이터의 변경에도 많은 제약이 따른다. 만약 우리의 이름이 바뀐다면 어떻게 해야 할까? 또한 사육사 - 우리 - 동물 구조에서 중간에 또 다른 계층을 하나 삽입하려 한다면? 계층 구조는 이러한 변화에 유연하게 대응하기 어렵다.

     

    관계형 모델 이후에 등장한 네트워크 모델 데이터베이스도 있다. 대표적인 예시로 Codasyl을 들 수 있는데, Codasyl은 기존 IMS와 같은 계층형 모델과 비교해 복수의 부모를 둘 수 있는 등 조금 더 구조적으로 유연하다는 장점이 있지만, 그만큼 구현과 데이터 검색이 계층형에 비해 더 복잡하다는 단점이 있다.

     

    관계형 모델의 등장

    1970년 E. F. Codd의 논문에 처음 등장한 관계형 데이터베이스 모델은 이러한 기존 데이터베이스 시스템의 문제를 해결하기 위한 대안이었다. 기존의 계층이나 네트워크 시스템과는 다르게 집합 개념을 베이스로 한다. 위의 예시를 가지고 설명하자면, 사육사라는 집합과 우리라는 집합, 그리고 동물이라는 세 집합의 관계를 가지고 데이터를 표현한다고 볼 수 있다.

     

    이 세 집합의 관계(Relation)를 '동물원 관리체계' 같은 이름으로 부른다면, 동물원 관리체계라는 전체 Relation을 구성하는 각 집합, 즉 사육사, 우리, 동물이라는 각 Attribute들은 위계나 부모-자식 관계가 아니라 동등한 상호 관계를 통해 데이터베이스로 표현된다. 따라서 이러한 구조에서는 더 유연한 데이터의 표현이 가능해진다.

     

    관계형 모델의 개념과 데이터베이스 설계

    이렇게 초창기에 Codd가 주장한 관계형 모델에서 사용된 Relation이라는 개념은 오늘날 우리가 관계형 DB를 다룰 때 사용하는 Table이라는 개념과 대응할 수 있다. 그리고 Tuple은 테이블의 각 행, 그리고 Attribute는 테이블의 각 열이라고 할 수 있다. 이렇게 관계형 모델의 기초 개념을 실제 데이터베이스 작업에 대응시킨다면, 우리가 데이터베이스를 만들 때 테이블 스키마 설계를 하는 것은 (각각이 하나의 집합인) 어떤 Attribute들 간의 관계(Table)로 데이터를 정의할 것인지를 결정하는 것이라고 볼 수 있다.

     

     

    ---

    참고자료

    - Stonebraker, Michael, and Joseph Hellerstein. “What Goes Around Comes Around”

    - Codd, E. F. “A Relational Model of Data for Large Shared Data Banks”

    - Adrienne Watt, "Database Design - 2nd Edition"

    댓글