데이터 모델링
데이터베이스라는 집을 집어야 한다. 집은 만들자고 해서 바로 만들 수 있는 것이 아니다. 건축을 하기에 앞서 내부와 뼈대를 어떻게 할 것인지 세세한 계획을 세워야 한다. 이러한 계획을 '데이터 모델링'이라고 한다.
하나의 DB를 만들기 위해서는 1. 현실 세계의 정보를 기반으로 개념적 모델링을 하고 -> 2. 이를 논리적 모델로 만들고 나서 -> 3. 데이터베이스로 구현한다.
이렇게 구현한 데이터베이스를 운영 및 감시하면서 부족한 점을 보완하거나 개선해 간다. 이를 데이터베이스 생명주기(database life cycle)이라 한다.

개념적 모델링 Conceptual modeling
요구사항을 수집하고 분석한 결과를 토대로 전체적인 뼈대를 만드는 과정이다. 개체(entity)를 추출하고 각 개체들의 관계를 정의하여 er 다이어그램(Entity relationship diagram)을 만드는 과정까지를 의미한다.

논리적 모델링 Logical modeling
ER 다이어그램을 이용하여 DBMS에 맞게 사상(mapping)하여 데이터베이스로 구현하기 위한 모델을 만드는 과정이다. 개념적 모델리에서 추출하지 않았던 속성들을 모두 추출해낸다.

이후에 작성한 논리적 모델에 맞게 컴퓨터에 저장하기 위한 물리적 구조를 정의하고 구현하는 과정을 물리적 모델링(Physical modeling)이라 한다.
ER모델
세상의 사물을 개체(entity)와 개체 간의 관계(relationship)으로 표현한다.
- 개체 Entity : 독립적인 의미를 지닌 유무형의 사람 또는 사물, 개체의 특성을 나타내는 속성(Attribute)에 의해 식별된다. DB상에서는 각각의 데이터값을 가진 낱개다.
- ER 다이어그램 : 개체와 개체 간의 관계를 표준화된 그림으로 나타낸 것.

ER 다이어그램 표현
※ER도표는 개체 타입과, 관계타입, 속성으로만 표현된다. 즉 개체나 관계의 instance로는 표현해선 안된다.
개체 타입
비슷한 속성의 개체들의 묶여 개체 집합이 되고, 그 개체 집합을 개체 타입으로 아울러 부른다.

- 강한 개체 Strong entity : 타 개체의 도움없이 독자적으로 존재하는 개체.
- 약한 개체 Weak entity : 반드시 상위 개체 타입을 가진 개체.
속성
속성은 개체가 가진 성질이다.

개체 타입과 선으로 연결되며 속성이 그 개체를 유일하게 식별할 수 있다면(후보키 및 기본키) 속성이름에 밑줄을 긋는다. 다음은 속성의 표현이다.

관계와 관계 타입
관계(Relationship)이란 개체 사이의 연관성을 나타내는 개념이다. 상호 개체 타입 간의 연결가능한 관계를 정의한 것이 관계타입(Relationship type)이다.

관계 집합에 참여하는 개체 타입의 수에 따라 차수(degree)를 센다. 이 차수에 따라 관계타입의 유형이 정해지는데 보통은 2진 관계(Binary relationship)가 주를 이룬다.

관계 대응수(Cardinality)는 두 개체 타입의 관계에 실제로 참여하는 개별 개체 수이다.

관계의 대응수는 위와 같이 표현한다. 다만 예를 들어, 학생과 학과이라는 개체가 소속이라는 관계를 맺는다고 하자. 이런 관계타입의 실질적인 최소값과 최대값은 어떻게 표현할까?

학생은 최소 하나의 학과에 소속해야 한다. 따라서 학생 개체쪽의 최소값은 1이다. 허나 하나만 소속이 가능하기에 최대값은 1이다. 학과쪽은 갓 개설해서 아직 소속학생이 없을 수도 있다. 이럴 때 최소값은 0이다. 재학생이 몇 명이 오든 수용할 수 있기에 제한이 없는 *로 표현한다.
개체 집합에서 모든 개체가 참여하는지의 여부에 따라 전체 참여와 부분 참여로 나눌 수 있다. 전체 참여는 표현 그대로 전체가 관계에 참여하기에 관계대응수에서 최소 1 이상이 참여한다는 의미가 된다. 덧붙여, 부분참여는 최소값이 0 이상이다.

순환적 관계 Recursive relationship
관계에서는 순환적 관계라는 것이 있다. 하나의 개체 타입이 자기 자신과 순환적으로 관계를 맺는 것을 의미한다.

약한 개체
약한 개체 타입은 앞서 다뤘듯이 독립적으로 존재할 수 없고 강한 개체가 있어야 존재할 수 있다. 이 때문에 독립적인 키가 존재할 수 없지만 상위 개체(강한 개체)의 키와 결합하여 약한 개체를 고유하게 식별하는 속성인 식별자(discriminator) 덕에 고유하게 구별될 수 있다.
