본문 바로가기
  • ㄹㅇ
SQL

[SQLD] 1장 (2) 엔터티, 속성, 관계 그리고 식별

by 한강석 2024. 4. 16.


엔터티(Entity)란?

엔터티란 업무에 필요한 유용한 정보를 저장하고 관리하기 위한 객체. 데이터 모델링의 3요소 중 어떤 것에 해당한다. 엔터티는 인스턴스와 속성으로 이루어져 있는데 이는 엔터티가 관계형 데이터 베이스에서 테이블의 형태로 저장된다는 것을 알면 쉽게 이해할 수 있다. 

 

예를 들어 학교에서 학생에 대한 데이터가 필요하다면 이를 테이블의 형태로 만들어 관리할 수 있을 것이다.

이 때 각 행(로우)는 학생 한명 한명을 의미하게 되고 각 열(칼럼)은 이들에 대한 각각의 정보를 담게 된다.

즉, 테이블이 엔터티라면 각 학생 하나하나는 인스턴스에 해당하고 각 칼럼은 이들의 속성을 뜻하게 된다. 

학년 출석번호 이름 성별 담임
1 1 1 AAA M TTT
1 1 2 BBB F TTT
1 1 3 CCC F TTT

 

또 여기에 선생님 엔터티가 있다면 두 테이블은 담임이라는 행에 의해 관계를 맺을 수 있을 것이고 성적 엔터티가 있다면 이들은 학년 + 반 + 번호를 조합하여 만든 학번에 의해 관계를 맺을 수 있을 것이다. 이렇게 서로 다른 엔터티들이 어떻게 서로 관계를 맺는지가 관계형 데이터 베이스의 핵심이다. 그래서 아무 엔터티와도 관계를 맺지 않는 엔터티는 의미없는 엔터티라고 판단한다. 

  • 엔터티의 특징
  1. 반드시 업무에 필요해야 한다.
  2. 유일한 식별자에 의해 식별이 가능해야한다.
  3. 인스턴스들의 집합이어야 한다. (2개 이상)
  4. 업무 프로세스에 이용되어야 한다.
  5. 반드시 속성이 있어야 한다.
  6. 엔터티는 다른 엔터티와 최소한 1개의 관계를 맺어야한다.

  • 분류

유무형에 따라

물리적인 형태가 있고 안정적이며 지속적으로 활용되는 유형 엔터티 (사원)

물리적인 형태가 없고 관리해야 할 개념적 정보로 구분되는 개념 엔터티 (조직)

업무를 수행할 때 발생하는 사건 엔터티로 구분된다 (청구)

발생시점에 따라

독립적으로 생성이 가능하고 고유한 주식별자를 가지는 기본 엔터티 (물품)

기본 엔터티에서 발생되고 중심적인 역할을 하는 중심 엔터티 (주문)

두개 이상의 부모 엔터티로부터 발생되고 상세 걸계단계나 상관 모델링을 통해 도출되는 행위 엔터티(주문 목록)

엔터티를 명명할 때는 현업에서 쓰는 용어로 약어를 가급적 쓰지 않고 생성된 의미대로 명명한다.

속성(Attributes)이란? 

속성이란 업무상 필요로 하는 인스턴스의 관리하고자 하는 데이터 단위이다. 마찬가지로 데이터 모델링의 3요소 중 어떤 것이 가지는 성격에 해당하는 내용이다. (인스턴스란 엔터티의 단수형이다.)

속성은 엔터티를 설명하고 각 인스턴스의 구성요소가 된다. 

  • 속성의 분류

속성의 특성에 따라서

  1. 기본 속성: 업무로부터 추출한 모든 속성
  2. 설계 속성: 업무상 필요한 데이터 외에 모델링을 위해 업무를 규칙화하기 위해 만든 속성
  3. 파생 속성: 다른 속성에 영향을 받아 발생하는 속성

엔터티 구성 방식에 따라서

  1. 기본키(PK): 엔터티를 식별할 수 있는 속성
  2. 외래키(FK): 다른 엔터티와의 관계를 정의하는데 쓰이는 속성
  3. 일반 속성: PK, FK가 아닌 속성

단일 값인지에 따라

  1. 단일속성: 한가지 값으로 이루어진 속성
  2. 복합속성: 여러 값을 가지는 속성 (학년, 반, 번호를 합쳐 학번을 만들 경우)

 

  • 도메인: 각 속성이 가질 수 있는 값의 범위가 있는데 이를 그 속성의 도메인이라 한다. 

ex) 학점: 0.0~4.5 사이의 실수 값, 주소: 20자리 이내의 문자열

관계(Relationship)

관계란 엔터티와 인스턴스 사이의 논리적인 연관성. 서로에게 연관성이 부여된 상태를 의미한다. 

  • 분류
  1. 존재에 의한 관계: 존재의 형태에 따라 관계가 형성됨. ( 사원이 부서에 소속된다.)
  2. 행위에 의한 관계: 어떤 행위에 의해 엔터티가 생기고 관계가 형성됨. (고객이 주문을 한다.)

  • 표기법
  1. 관계명: 관계명은 관계에 참여하는 엔터티 각각의 입장에 따른 관계명을 가짐. (피동, 사동) ,
    ex) 선생님 - 학생 의 엔터티는 각각 가르친다. 배운다. 라는 관계명을 가진다. 


  2. 관계차수: 1:1, 1:M, M:N 등 엔터티 간 관계를 맺는 방법
    1. 1:1 관계 차수: 관계에 참여하는 각각의 엔터티는 관계를 맺는 다른 엔터티에 대해 단지 하나의 관계만을 가지고 있다. 
      학생 - 주소의 경우. 학생 1명당 하나의 주소 정보가 관계를 맺게 된다. 
    2. 1:M 관계 차수: 하나의 엔터티가 다른 엔터티의 여러 인스턴스와 관계를 맺는다. 
      반 - 학생 의 경우 반 1개의 정보는 여러 명의 학생 정보와 관계를 맺게 된다. 
    3. M:M 관계 차수: 각각의 엔터티는 관계를 맺는 다른 엔터티에 대해 하나나 그 이상의 수와 관계를 맺고 있다.
      학생 - 선생님의 경우 학생은 여러 명의 선생님에게 배우고 선생님도 여러 명의 학생들을 가르쳐 관계를 맺는다. 
  3. 관계 선택사양: 참여하는 모든 참가자가 반드시 관계를 가지는 필수참여와 일부 참여(NULL 허용)인 선택참여 형식이 있다. 
    반 - 학생  의 경우: 하나의 학생은 반드시 하나의 반에 소속되어야 하기 때문에 필수 참여에 해당한다. 
    학생 - 석식 의 경우: 학생은 석식을 먹을 수도 안 먹을 수도 있기 때문에 선택 참여에 해당한다. 

식별자

식별자란 하나의 엔터티에 구성된 여러 속성 중에 엔터티를 대표할 수 있는 속성. 또한 엔터티에 소속된 각 인스턴스들을 구분할 수 있는 구분자이다. 

  • 주식별자의 특징
  1. 유일성: 엔터티 내 모든 인스턴스들이 유일하게 구분되어야 한다.
  2. 최소성: 주식별자를 구성하는 속성의수는 유일성을 만족하는 최소의 수가 되어야 한다.
  3. 불변성: 지정된 주식별자는 자주 변하지 않는 값이어야 한다.
  4. 존재성: NULL값을 허용하지 않는다.

  • 분류
  1. 대표성 여부: 주식별자/보조식별자 - 각 어커런스를 구분하는 구분자
  2. 스스로 생성 여부: 내부/외부 식별자 - 스스로 만들어지는지
  3. 속성의 수: 단일/외부 식별자 - 하나의 속성으로 이루어져 있는지
  4. 대체여부: 본질/인조 - 업무에 의해 정의됐는지, 원조 식별자가 복잡해서 만들어진 인조식별자인지.

  • 도출기준
  1. 해당 업무에서 자주 이용되는 속성으로 지정한다.
  2. 명칭, 내역 등 이름으로 기술되는 것은 피한다. (WHERE절로 표현하기 귀찮아 질 수 있음.)
  3. 속성의 수가 많아지지 않도록 함(적절히 인조식별자를 활용하여)

  • 식별자/ 비식별자 관계

외부 식별자(FK)는 자기 자신의 엔터티에서 필요한 속성이 아니라 다른 엔터티와의 관계를 통해 자식쪽에 생성되는 속성이며 이를 주식별자로 정의하면 식별자관계가 형성된다.

 

반면 비식별자 관계는 부모로부터 속성을 받았으나 자식 엔터티의 주식별자로 사용하지는 않고 부모와의 연결로만 사용하는 형태를 의미한다.

비식별자 관계에 의한 외부속성을 생성하는 조건으로 

  1. 자식 엔터티에서 받은 속성이 반드시 필수가 아니어도 무방하여 부모 없는 자식이 생성될 수 있는 경우
  2. 엔터티별로 데이터의 생명주기가 달라 부모가 자식을 남기고 먼저 소멸할 수 있는 경우
  3. 여러 개의 엔터티가 하나의 엔터티로 통합되었는데 각각의 엔터티가 별도의 관계를 가질 경우( 통합된 엔터티 전체를 식별할 수 없음)
  4. 자식 엔터티에서 주식별자로 사용해도 되지만 별도의 주식별자를 쓰는 것이 더 유리할 경우

 

식별자 관계로만 설정할 경우의 문제점

  1. 지속적으로 식별자 관계를 연결한 데이터 모델의 PK 속성의 수는 데이터 모델의 흐름이 길어질수록 증가할 수 밖에 없는 구조를 가지게 된다.
  2. 조인에 참여하는 주식별자속성의 수가 많을 경우 정확하게 조인관계를 설정하지 못해 정보가 누락될 수 있다. 
  3. 식별자 관계만으로 연결된 데이터 모델의 특징은 주식별자 속성이 지속적으로 증가할 수 밖에 없는 구조로서 개발의 복잡성과 오류가능성을 유발시킬 수 있는 요인이 될 수 있다.

'SQL' 카테고리의 다른 글

[SQLD] 조인과 집합연산자  (0) 2024.04.17
[SQLD] SQL 내장 함수 요약 정리  (0) 2024.04.17
[SQLD] 2과목 SQL 기본 및 활용  (0) 2024.04.17
[SQLD] 2장 데이터 모델과 성능  (0) 2024.04.16
[SQLD] 1장. 데이터 모델링의 이해  (0) 2024.04.16