Relational Database
모델링이란 무었일까?
먼저 모델링이란 무었일까?
모델은 현실에 존재하는 무언가를 목적에 맞게 모방하는 것을 의미한다.
좋은 모델이란 목적에 부합하는 모방을 의미할 것이다.
현실은 복잡하게 얽혀있고, 이를 모델링 하기에는 어려움이 있다.
누구나 모델링을 할 수 있으나 그 과정은 어렵다.
우리의 목적은 컴퓨터 안의 데이터베이스안의 관계형데이터베이스안의 테이블에 데이터를 담는 것이다.
어렵지만 이해한다면 누구나 따라 할 수 있게 한것이 데이터모델링이다.
데이터모델링을 통해 현실의 복잡함을 보다 쉽게 풀어서 설명하게 된다.
현실의 복잡성을 테이블에 담는 방법 ===> 데이터모델링이다.
데이터모델링 순서
업무파악 -> 개념적 데이터 모델링 -> 논리적 데이터 모델링 -> 물리적 데이터 모델링
업무파악 & 기획
우리가 할려는 일이 무엇인가?
산출물 : 기획서
개념적 데이터 모델링
현실의 업무를 뜯어내서 개념을 찾아낸 것이다.
어떠한 개념이 있고, 각각의 개념은 어떻게 상호작용하는가?
산출물 : E-R다이아그램
논리적 데이터 모델링
관계형데이터베이스 패러다임에 맞는 표로서 만들어 보는 것이다.
업무파악 & 기획
우리가 직면하는 문제
컴퓨터 자체문제 해결
ex)데이터베이스를 만드는 것
현실의 문제 해결
ex)데이터베이스를 통해서 현실의 문제를 해결
우리는 데이터베이스를 통해서 현실을 복잡성 문제를 해결 하고 싶다.
그러기 위해서는 먼저 어떤식으로 할 것인지 대화를 많이 하는 것이 중요하다.
대화를 많이 해서 서로가 생각하는 것을 맞추는 것이 좋다.
그리고 어떤 UI가 될 것인지도 생각해 보는 것이 좋다.
익숙해지는 것은 나쁜 것이 아니다.
하지만 이해하기 전에 익숙해지면 말로 다른 사람에게 설명하기가 어렵다.
개념적 데이터모델링
개념적모델링이란 파악 한 업무에서 개념을 뽑아 내는 것이다.
개념적모델링이 잘되면 논리적모델링, 물리적모델링을 보다 쉽게 할 수 있다.
하지만 개념적모델링을 하기란 쉽지 않다.
처음 모델링을 진행하는 것이라면 더욱 그럴 것이다.
논리적모델링, 물리적모델링 경험 없이 개념적모델링을 이해하기란 어렵다.
개념적모델링을 통해서 얻을 수 있는 점!!!
Entity Relationship Diagram
정보
정보를 발견하고 다른사람들에게 표현할수 있도록 도와준다.
어떠한 정보가 들어 있는지 알 수 있다.
정보그룹
서로 연관된 정보를 그룹핑해서 인식하고 이것을 다른사람에게 표현 할 수 있게 해준다.
위의 E-R다이아그램에서는 댓긋
,글
,저자
로 그룹핑을 했다.
정보그룹관계
정보그룹 사이의 관계를 인식하고, 그것을 다른 사람에게 표현 할 수 있게 한다.
위의 E-R다이아그램 속한다
,작성한다
라는 관계로 이루어져 있다.
Entity Relationship Diagram은 현실로 부터 개념을 인식하는 도구이며, 이 도구를 통해 다른 사람도 개념에 대해서 인식할 수 있게 된다.
관계형데이터베이스에 어울리는 개념
위의 사진에선 댓글
, 글
, 저자
라는 주제에 따라서 속성을 그룹핑 할 수 있다.
그룹핑을 통해서 거대 단일 테이블과 같이 자원의 낭비를 억제 할 수 있고, 중복을 제거 할 수 있다.
JOIN을 통해 원하는 데이터만을 추출해 올 수 있다.
ERD의 구성요소
E-R다이아그램의 용어와 관계형데이터베이스의 용어에는 차이가 있다.
Entity
구체적인 데이터가 아닌, 그룹핑하는 테이블에 해당한다.
Attribute
데이터를 담을 때 분류하는 항목에 해당한다.
테이블의 Column에 해당한다.
Relation
Entity간의 관계를 의미하며, 테이블에서 JOIN을 위한 참조 역할을 하는 것들이다.
Tuple
실제 테이블에 들어가는 데이터에 해당한다.
참고사항
Attribute를 추출하는데 있어서 눈에 보이는 모든것을 Attribute로 만들 수는 없다. 중복이 발생하거나 Attribute가 Entity가 될 가능성이 있는 Attribute의 경우는 따로 Entity로 만들어서 관리하는 것이 더 좋다.
예로 글의 댓글이나 저자는 왜 속성이 되지 않는가?
댓글이나 저자가 하나의 Attribute에 해당한다면 포함 시켜도 상관없다.
하지만 댓글과 저자는 Attribute가 필요한 Entity이기 때문에 따로 Entitiy로 만든 것이다.
Entitiy는 또 다른 Entitiy 안에 포함 될 수 없다.
Entity 정의
Entity는 Attribute를 그룹화한 개념이다.
포괄적인 의미를 담고 있는 것이 좋다.
Attribute 정의
Entity안에 들어갈 구체적인 Attribute를 추가 한다.
Identifiter 식별자 지정
Identifiter
식별자 지정 원하는 대상을 정확히 타겟팅한다.
중복이 허용되지 않는다.
기본키가 된다.
인조키
Attribute중 식별자가 될 만한 Attribute 없을 때 만들어 주는 키
후보키(candidate key)
기본키가 될 수 있는 키
대체키(alternate key)
기본키가 아닌 후보키들
기본키(primary key)
엔티티의 속성 중 엔티티를 나타낼 수 있는 고유한 값
엔티티간의 연결
글 Entity의 저자아이디는 foreign key이고
저자 Entity의 primary key에 해당하는 아이디를 참조한다.
Cardinality
1:1관계
한명의 선생님은 한개의 반만 담임을 맡아야 하므로 1이다
한개의 반은 한명의 선생님만 담임으로 맡아질 수 있으므로 1이다.
그러므로 1:1관계이다.
1:N관계
한명의 저자는 여러개의 댓글을 적을 수 있으므로 N 이다.
댓글은 한명의 저자에게서 적어질 수 있으므로 1 이다.
(댓글은 한 사람이 작성하는 것이다. 여러명이 같이 작성하는 것이 아니다.)
그러므로 1:N관계이다.
N:M 관계
저자는 여러개의 글을 작성 할 수 있으므로 M이다.
글은 여러 저자가 함께 작성할 수 있으므로 N이다.
그러므로 N:M관계이다.
하지만 실제 현실 데이터베이스에서는 표현 할 수 없다.
연결테이블을 만들어서 1:N 로 컴버팅후에 사용한다.
Optionality
Optionality는 반드시에 해당한다. 반드시 필요하면 0
그렇지 않느면 ㅣ
으로 표현한다.
저자는 댓글을 반드시 적을 필요가 없다. 그러므로 0
에 해당한다.
댓글은 적히게 되면 반드시 저자가 필요하다 그러므로 ㅣ
에 해당한다.
Cardinality와 Optionality로 표현하기
저자는 댓글을 반드시 적을 필요는 없지만 적게 된다면 여러개의 댓글을 달 수 있다. 그러므로 0
과 N 이 된다.
댓글은 적히게 된다면 저자가 반드시 필요하므로 ㅣ
이 되고, 여러명의 저자가 작성하지 않고 한사람이 적으므로 1 이 된다.
참고
생활코딩 Cardinality와 Optionality 표현 웹사이트
http://erd.yah.ac/