DB를 설계할 때 생각할 점
- 중복을 최대한 피해야 한다.
- 덜 구현한 부분이나 기능이 모자란 부분이 없도록 해야 한다.
Entity Relationship 모델 의 줄임말로, 객체 사이의 관계를 표시하는 데이터 모델이다.
entity sets, relationship sets, attribute 로 이루어진다.
Entity sets
사람, 회사, 공장 등 DB의 대상이 되는 객체이다.
같은 타입의 엔티티를 모아둔 것을 엔티티 집합이라고 한다.
ER 다이어그램에서는 이름과 속성으로 이루어진 컨테이너 형태로 나타낸다
| Instructor |
|---|
| ID |
| name |
| salary |
Relationship sets
두 개 이상 엔티티 사이의 관계를 나타낸다.
예를 들어 학생 12345가 교수 67890을 지도교수로 두고 있다면 다음처럼 나타낼 수 있다.
(12345, 67890) ∈ Advisor
ER 다이어그램에서는 엔티티를 잇는 실선으로 표현한다. 1대1 관계가 아니어도 된다.
또한 관계도 속성을 가질 수 있다.
예를 들어 지도 교수 관계가 언제부터 시작되었는지 날짜를 속성으로 표현 가능하다. 이 경우 Relationship 은 마름모 모양으로 나타내고 관계가 갖는 속성은 컨테이너에 작성하는데, 둘 사이를 점선으로 나타낸다.
보통 두 엔티티 사이의 관계(Binary Relationship) 가 일반적이지만 가끔 여러 개의 엔티티 사이의 관계가 존재할 수도 있다.
Roles
relationship set은 유일하지 않은 객체가 같은 타입을 공유하는 경우가 있기 때문에 구분하기 위해 역할을 설정할 수 있다. 이것을 Role 이라고 한다.
각 객체가 몇 개의 상대 객체와 매핑되는지 정의하는 규칙은 여러 가지 있다.
relation과 entity를 이을 때 매핑 규칙에 따라 one은 화살표, many는 실선으로 나타낸다.
relationship set은 보통 두 개의 객체 간에 형성되지만 가끔 세 개 이상의 객체와 관련 있는 경우도 있는데 이 경우 비이진으로 분류한다.
여러 부분(subpart)으로 쪼갤 수 있는 속성이다.
예를 들어 이름 이라는 속성을 성, 중간이름, 이름 으로 나눌 수 있다.
weak entity 는 스스로 primary key를 갖지 않고 다른 엔티티의 키에 의존하는 종속적인 개체이다.
E-R 다이어그램에서 테두리가 두 줄인 사각형 안에 나타내고 key의 밑줄은 점선으로 표시한다.
1. 엔티티 -> 테이블
일반 엔티티는 바로 테이블로 변환, weak entity는 테이블로 변환 후 두 줄로 표기된 관계(weak entity를 정의하는 관계)에 해당하는 strong entity의 primary key를 가져온다.
2-1. one-to-many 관계
관계가 정의하는 속성을 many 쪽의 attribute로 추가한다.
2-2. many-to-many 관계
두 엔티티 사이의 관계를 나타내기 위한 별도의 테이블을 생성한다.
이 때 attribute로는 두 엔티티의 primary key를 가진다.
2-3. one-to-one 관게
관계가 정의하는 속성을 어느 쪽의 attribute로 넣어도 상관 없지만 둘 다 넣으면 중복의 가능성이 있기 때문에 주의한다. 중복을 피하는지 여부는 DB마다 다를 수 있다.
Composit attributes
복합 속성의 경우 속성의 하위 요소들을 나눠서 별개의 attribute로 넣어도 되고 하나로 합쳐도 된다.
Multivalued attributes
다중값(집합 형태의 attribute)은 테이블에 저장하기 적절하지 않다.
따라서 테이블을 따로 분리하는 편이 좋다.