[DB] E-R모델과 DB 디자인

티라노·2025년 4월 29일

데이터베이스

목록 보기
8/11

DB 설계

  1. 예상되는 DB유저에게 필요한 데이터를 정의한다.
  2. 데이터 모델을 선택한다.
  3. 추상화한 데이터 모델을 DB 스키마로 구현한다.
    이 단계에서 논리적 디자인과 물리적 디자인을 정한다.

DB를 설계할 때 생각할 점

  • 중복을 최대한 피해야 한다.
  • 덜 구현한 부분이나 기능이 모자란 부분이 없도록 해야 한다.

E-R 모델

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 이라고 한다.


Mapping Cardinality

각 객체가 몇 개의 상대 객체와 매핑되는지 정의하는 규칙은 여러 가지 있다.

  • One to One
  • One to Many
  • Many to One
  • Many to Many

relation과 entity를 이을 때 매핑 규칙에 따라 one은 화살표, many는 실선으로 나타낸다.

Non-binary relationship sets

relationship set은 보통 두 개의 객체 간에 형성되지만 가끔 세 개 이상의 객체와 관련 있는 경우도 있는데 이 경우 비이진으로 분류한다.

Composite attributes

여러 부분(subpart)으로 쪼갤 수 있는 속성이다.
예를 들어 이름 이라는 속성을 , 중간이름, 이름 으로 나눌 수 있다.

Weak entity sets

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)은 테이블에 저장하기 적절하지 않다.
따라서 테이블을 따로 분리하는 편이 좋다.

0개의 댓글