DB 모델링/1_DB 모델링 개요

3) 관계(Relationship)와 카디널리티(Cardinality)

thespeace 2021. 11. 27. 20:00

DB 모델링의 주요 개념

 

관계(Relationship)

두 엔티티 사이의 관련성을 나타낸다. 엔티티간의 어떠한 관계로 연결이 되어 있는지 등등을 나타낸다.ex) 학생 - 수강과목 / 학생은 수강과목을 수강한다. 수강과목은 학생으로부터 수강된다.

 

두 엔티티 간의 관계가 있다는 것은 실무적인 관점에서 봤을때 상호공유하는 속성이 있다는 것과 같다.엔티티 간의 관계를 설정함으로서 속성이 공유되게 된다. 서로 공유하는 속성이 없다면 '관계설정이 되어 있지 않다'라는 것과 같은 말이다. 그래서 이런 관계라는 건 데이터를 매개로한 업무의 흐름과 데이터의 흐름을 규명하게 된다. 그래서 데이터의 발생 경로와 어떤 경로를 거쳐서 데이터가 어떻게 변화하고 진화하는지를 나타낼 수 있는 것이다. 이 관계라는 것을 통해서!

ex) 학번

 

카디널리티(Cardinality)

  • 각 엔티티에 속해 있는 인스턴스들 간에 수적으로 어떤 관계에 있는지를 나타낸다.

각 엔티티의 실제 값들로 어떤 인스턴스들이 있는데, 이 인스턴스들 간의 수적으로 어떤 관계가 있는지를 나타낸다라는 것. 

  • 종류로는 1:1, 1:N, M:N 의 관계가 있다.

 보통 1:N 관계를 많이 보게 될 것이고, 그렇게 작업을 해야 한다.

ex) 경영학과를 전공한 울산에 사는 박지윤이라는 학생이 있는데, 그 학생의 학번은 201802인데, 이 학번을 가지고 취미를 조회했을 때 바둑을 좋아하고 여행을 좋아하는 취미를 확인 할 수 있다.

이를 통해 박지윤이라는 학생은 여러개의 취미를 가지고 있다. 한명의 학생이 여러개의 취미를 가지고 있다. 이것 말고도 더 가질 수도 있겠죠. 이런 관계를 1:N 관계다. 라고 합니다.

 

 

오라클을 배우신 분들은 주식별자, 기본키, 외래식별자, 외래키 이렇게 부르는데, DB모델링에서는 키라는 용어 대신 식별자라는 용어를 사용해야 한다. 키라는 용어는 물리적 DB로 들어가면 그때 쓰인다. 그전까지는 식별자라는 용어를 사용하하면 좋다.

 

주식별자(Primary Identifier)

엔티티 내에 있는 각각의 인스턴스를 구별하는 기준을 말한다.

하나의 엔티티에 여러가지 인스턴스가 있는 데 그 인스턴스들을 유일하게 구분할 수 있는 구분자의 역할을 해야하는데, 예를 들어 홍길동이라는 이름을 가진 사람이 두명있는데 그 둘을 구별하기 위해 사번, 부서 등등의 코드를 사용해서 각 인스턴스들을 구별할 수 있는 기준이 주식별자다.

주 식별자는 항상 엔티티의 맨 위에 위치하게 되어진다.

PK , 마름모 기호로 명시 할 수 있다. 이를 IE표기법이라고 한다.

* 엔티티를 만들면 항상 주 식별자가 있어야 한다. 

 ex) 오라클 create 테이블; 을 사용해서 만들면 주 식별자가 없어도 문제가 되진 않는데, 그때 그값을 입력하려면 프라이머리키가 없다는 오류가 발생을 한다. 그래서 항상 엔티티를 만들때 주 식별자가 있어야 한다는 점 명심해야 한다.

 

외래식별자(Foreign Identifier)

엔티티와 엔티티의 관계를 연결해주는 고리의 역할을 한다.

엔티티와 엔티티의 관계를 설정할 때 부모엔티티의 주 식별자가 자식 엔티티의 외래식별자로 들어가는 경우다.

두 엔티티간의 관계가 있다는 것은 서로 상호 공유하는 속성이 있다라는 것이 외래식별자에 해당이 된다.

 

 

개념적 설계

요구분석 단계에서 정의된 핵심 개체와 그들 간의 관계를 바탕으로 ERD를 생성하는 단계+업무 분석 단계에 해당 ex) 00다이어그램+요구사항명세서,업무기술서를 가지고 핵심 엔티티들을 뽑아내고, 그 엔티티들의 관계설정, 이런 것들을 ER다이어그램으로 그려 내는 것을 엔티티릴레이션다이어그램이라고 해서 엔티티간의 관계를 설정하는 다이어그램을 그리는 단계를 개념적 설계라고 한다.

 

논리적 설계

개념 설계에서 추상화된 데이터를 구체화하여 개체, 속성을 테이블화하고 상세화 하는 과정

+ERD를 그린 후 실제 값을 추가(Insert), 수정,삭제 할 때를 생각하면서 데이터의 중복 등등 이상현상이 있을 때 정교화라는 과정을 통해서 해소를 시켜준다. 그 정교화에 초점을 맞춘 단계가 논리적 설계 단계라고 한다.

+정교화를 통해서 테이블 쪼개는 과정을 할 것이다.

 

물리적 설계

논리적 설계 단계에서 표현된 데이터(ERD)를 실제 컴퓨터의 저장장치에 어떻게 표현할 것인가(관계형 데이터베이스로 전환)

+논리적 설계 단계에서 최종적인 ERD가 그려진 후, 실제로 DB를 구축하기에 앞서서 하는 단계를 물리적 설계단계 라고 한다.

+실질적으로 사용하는 DBMS에 맞춰서 (ex) 오라클, Mysql 등등) 데이터 타입, 용량, 제약 조건 등등 설정에 대해 다루는 것이 물리적 설계 단계이다. 뿐만아니라 뷰, 인덱스를 설정하는 단계이다.

+논리적 설계에서 정교화 작업을 통해 테이블을 쪼개는 과정을 한 후, 그 결과물들을 가지고 조회를 한다거나 쿼리문 처리를 했을 때 그 응답속도에 대해서 생각을 해봐야 하는 단계가 물리적 설계 단계이다. ex) join이 많아서 응답속도가 오래 걸린 다면 반정교화 과정을 통해서 테이블을 합치거나 해야한다.