표준 SQL 및 데이터베이스 입문
지금까지는 계속 '테이블(표)'를 봐왔지만, 이번에는 데이터가 표가 되기 전의 모습을 생각해 봅시다. 조금 특별한 도구, 데이터베이스 설계 시에 유용한 ER다이어그램(ER Diagram)에 관한 내용입니다.
'원래 테이블이란 무엇인가?'로 돌아가 보면, 관계형 데이터베이스의 테이블은 열과 열 사이의 관계(릴레이션)을 표현하고 있다고 볼 수 있습니다. 그래서 관계형 데이터베이스라는 이름이 붙은 것입니다.
관련없는 사항들을 한 테이블에 넣어서는 안됩니다. 예를 들어, 학생마스터라면 단순하게 주키인 '학생번호'와 직접 관련된 열만 만들어야 합니다. 이것이 기본원칙입니다. 정규화에서도 이것만 이야기했습니다.
하지만, 그렇다하더라도, 실제로는 어렵기도 하고, 혼자만으로 판단하기도 힘들고 항목이 많으면 혼란스러워지기도 합니다. 그래서 본질을 고민할 수 있는 지침이 있으면 좋겠지요? 그래서 등장하는 것이 ER모델입니다.
일상업무에서 사용하는 데이터, 즉, 관리하고자 하는 대상이나 사건들은 반드시 정해진 형태를 갖고 있지 않습니다. 대개는 복잡해서 전체를 파악하기도 어렵습니다. 그래서 데이터를 일정한 규칙에 따라 정리하고 정해진 형태(model)로 구성하는 방법을 '데이터 모델링(data modeling)'이라고 합니다.
ER모델(Entity-Relationship model)은 1976년 Peter Chen이 제안한 모델로 '세상에 존재하는 모든 것은 가시여부와 상관없이 실체(entity)와 관계(relationship)로 표현할 수 있다'는 생각에 기반하고 있습니다. ER모델에서는 세상의 모든 것을 '엔티티', '속성', '관계'의 3가지로 나타냅니다.
엔티티, 속성, 관계
엔티티(entity)는 사람이나 물건 등 실존하는 사물이나 사건을 의미하며, 보통 직사각형으로 표현됩니다. 엔티티는 '실체'로 번역되지만, '성적'과 같이 눈에 보이지 않는 개념도 포함됩니다. 속성(attribute)은 엔티티의 특성을 나타내며, 예를 들어, '학생'엔티티에 있는 '학생번호'나 '이름', '정원' 엔티티에 있는 '발행일'등이 이에 해당합니다. 관계(relationship)은 엔티티 간의 관계성을 나타냅니다. 예를 들어, '학생' 엔티티와 '코스'엔티티 사이에는 '선택한다'ㄹ라는 관계가 존재합니다.
SQL은 관계형 데이터베이스용 언어이고 관계형 데이터베이스는 '관계모델'에 기반한다고 이야기했습니다. 하지만 지금 이야기하는 'ER모델'은?
관계모델은 하나의 이론이자 관계형 데이터베이스라는 형태로 구현된 것이고, ER모델은 또 다른 모델입니다. 그러나 관계모델과 궁합이 좋아, 사물을 정리하고 생각하는데 편리하기 때문에 관계형 데이터베이스 설계에서는 ER모델이 사용되고 있습니다.
모든 사물이나 사건을 엔티티와 릴레이션쉽(관계)으로 표현하는 ER모델의 개념은 단순하고 이해하기 쉬워서 정보처리분야에서 널리 받아들여졌습니다. 현재 ER모델은 데이터베이스 설계(스키마 설계)에서 사용하는 모델로 정착되어 있습니다. 한편, 관계형 데이터베이스와 SQL은 1970년에 E.F. Codd가 제안한 관계모델에 기반하여 만들어졌습니다. 관계모델에서는 속성(열)과 속성 간의 관계에 주목하며, 데이터를 2차원 테이블로 표현합니다.
결국, 바로 표로 나타내기보다 한번 도표로 그리는 것이 이해하기 쉽다는 것일까?
대략적으로 맞습니다. 다만, 도표를 만드는 첫번째 목적은 데이터베이스 설계에 있으므로, 관계형 데이터베이스에 쉽게 적용할 수 있는 형태로 만들기 위한 노력이 필요합니다. 여기에도 일정한 규칙이 있습니다. 규칙이라고 들으면 복잡해 보일 수 있지만, 실제로는 사물을 판단하기 쉽게 하기 위해 규칙을 정하는 것이긴 합니다. 그렇다하더라도 어려운 점은 있습니다.
어떤 형식의 것을 다른 형식에 대응시키는 것을 '사상(mapping)'이라고 합니다. ER모델에 의한 데이터모델을 가능한 그대로 관계형 데이터베이스에 사상(mapping)하기 위해서는 데이터 모델이 관계형 데이터베이스에서 다룰 수 있는 적절한 형태로 되어 있어야 합니다. 아래와 같이 직사각형, 타원, 마름모로 구성된 도표는 그 자체로는 테이블에 대응시키기 어렵기 때문에, 실제로는 다른 방법으로 도표를 그리는 것이 일반적입니다.
여기서 중요한 점은 관계(Relationship)은 참조제약으로 나타난다는 것입니다. 위에서는 관계를 마름모로 표시되어 있었습니다. 그래서 데이터베이스 설계용 ER 다이어그램은 보통 속성을 박스안에 넣고, 박스와 박스를 잇는 선만으로 표현하는 것이 일반적입니다. 이 부분은 나중에 다룹니다.
ER모델의 관계는 참조제약으로 표현한다고 설명했습니다. ER모델에서는 3개 이상의 엔티티 사이에 관계가 존재할 수 있지만, 관계형 데이터베이스에서는 두 엔티티 간의 관계가 되도록 조정됩니다.
관계형 데이터베이스에 맞게 조정
예를들어, '학생', '캠퍼스', '선택과목(코스)'라는 3개의 엔티티간에 관계가 존재할 경우, 만약, '캠퍼스'와 '선택과목(코스)'사이에 직접적인 관계가 없다면 '학생'과 '캠퍼스'의 관계(relationship)으로 고려합니다. 반면에 '캠퍼스'와 '코스'의 조합에 대해 '학생'이 연결된다면, '캠퍼스'와 '선택과목(코스)'간의 관계와 '컴퍼스와 선택과목(코스)'와 '학생'간의 관계를 생성합니다.
참고로 관계형 데이터베이스용 ER다이어그램이라면 나중에 설명하는 내용처럼 처음부터 2개의 박스를 잇는 선으로 표현하는 것이 일반적입니다.
조정방식에 따라 엔티티가 늘어날 수도 있습니다. 엔티티가 늘어난다는 것은 곧 테이블이 하나씩 늘어난다는 의미입니다. (테이블이 늘어나는 느낌이 이해되기 시작했나요?)
하지만, 그렇게 함으로써 각각이 점점 단순해지게 되는 것입니다. 나중에 SELECT문으로 어떻게든 합칠 수 있기 때문에 걱정할 필요가 없습니다. 충분히 분해해 두면, 다양한 조합방법이 가능하기 때문에 믿고 열심히 해봅시다.
ER모델에서는 관계를 1대1, 1대다, 다대1, 대다다의 4가지 패턴으로 파악합니다. 이 대응관계를 '카디널리티(cardinality, 다중도)'라고 부릅니다. 예를 들어, 대학교와 총장은 1대1, 대학교와 학생은 1대다, 학생 동아리활동은 다대다가 됩니다. 아래와 같이 '1'과 'm' 또는 'n'으로 표시되어 있습니다. 'm'과 'n'은 모두 '다'를 의미하지만, 반드시 같은 수를 나타내는 것은 아니므로 서로 다른 문자로 표현됩니다.
관계형 데이터베이스의 참조제약의 경우, 참조되는 쪽(외부 테이블)의 열에는 중복이 허용되지 않습니다. 중복되면 어떤 행에 대응하는지 특정할 수 없기 때문입니다. 따라서, 참조되는 쪽이 여러 개인 다대1, 다대다 관계의 경우에는, 새로운 테이블(관계, 다음페이지의 컬럼을 참조)을 마련할 필요가 있습니다.
참고로 카디널리티(Cardinality)라는 용어는 '집합의 농도'라는 의미로 사용되기도 합니다. 예를 들어, 캠퍼스가 4가지 종류라면 캠퍼스 열의 농도는 4입니다.
이상으로 ER모델의 기초지식에 대해 설명했습니다. 익숙하지 않은 용어들이 많이 나왔는데 꼭 외워야 할 필요는 없습니다. 도표를 만들다보면 익숙해면서 이해가 되기 때문입니다.
©2024-2025 GAEBAL AI, Hand-crafted & made with Damon Jaewoo Kim.
GAEBAL AI 개발사: https://gaebalai.com
AI 강의 및 개발, 컨설팅 문의: https://talk.naver.com/ct/w5umt5