Post

[SQLD] 2. 엔터티(Entity), 속성(Attribute), 관계(Relationship), 식별자(Identifier)

[SQLD] 2. 엔터티(Entity), 속성(Attribute), 관계(Relationship), 식별자(Identifier)

엔터티 (Entity)

개념

  • 엔터티는 데이터베이스에서 독립적으로 존재하는 객체나 개념
  • 실제 세계의 사물, 사건, 또는 개념을 데이터베이스 내에서 표현하는 논리적 단위

특징

  • 고유성
    • 하나의 엔터티는 다른 엔터티와 구별되는 특성을 가져야 함
    • 고유한 식별자를 통해 식별 가능 (학번 등)
  • 속성 보유
    • 데이터를 표현하는 속성을 가져야 함
    • 인스턴스는 각 속성에 대해 1개의 값만 가질 수 있음
  • 인스턴스의 집합
    • 하나의 엔터티는 여러 개의 인스턴스(행, 레코드)를 가질 수 있음
  • 관계 가능
    • 다른 엔터티와 관계를 맺을 수 있어야 함

분류

유형과 무형에 따른 분류

  1. 유형 엔터티 (Tangible Entity)
    • 물리적으로 존재하는 엔터티
    • 예시: 학생, 직원, 제품
  2. 개념 엔터티 (Conceptual Entity)
    • 추상적인 개념을 나타내는 엔터티
    • 예시: 강의, 프로젝트, 계약
  3. 사건 엔터티 (Event Entity)
    • 특정 시점에 발생하는 사건을 나타내는 엔터티
    • 예시: 주문, 예약, 결제

발생 시점에 따른 분류

  1. 기본 엔터티 (Fundamental Entity)
    • 독립적으로 존재하며, 다른 엔터티에 의해 의존되지 않는 엔터티
    • 예시: 고객, 제품
  2. 중심 엔터티 (Core Entity)
    • 여러 개의 엔터티와 관계를 가지며, 데이터 모델의 중심이 되는 엔터티
    • 예시: 주문, 예약
  3. 행위 엔터티 (Action Entity)
    • 특정 행위나 이벤트를 나타내는 엔터티로, 발생하는 시점에 따라 데이터를 저장
    • 예시: 거래 내역, 출석 기록

엔터티의 특성에 따른 분류

  1. 강한 엔터티 (Strong Entity)
    • 자체적으로 존재 가능한 엔터티
    • 독립적인 기본 키(Primary Key, PK)를 가짐
    • 다른 엔터티에 의존하지 않음
    • 예시: 학생(Student), 교수(Professor), 강의(Course)
  2. 약한 엔터티 (Weak Entity)
    • 독립적으로 존재할 수 없는 엔터티
    • 부모 엔터티(Strong Entity)의 기본 키를 참조하여 유일성을 확보
    • 고유한 기본 키를 가지지 않으며, 부모 엔터티의 키와 함께 부분 키(Partial Key)를 가짐
    • 식별 관계(Identifying Relationship)를 통해 부모 엔터티의 기본 키를 상속
    • 예시
      • 주문(주문 ID) → 주문 항목(구분자 키: 주문 ID + 상품 ID)
      • 학생(학번) → 성적(구분자 키: 학번 + 과목코드)

부분 키(Partial Key)와 구분자 키(Discriminating Key)의 차이점 정리

구분부분 키 (Partial Key)구분자 키 (Discriminating Key)
정의약한 엔터티의 고유성을 부여하는 속성 집합약한 엔터티 내에서 고유성을 결정하는 속성
구성 요소부모 엔터티의 기본 키 + 내부 식별 속성부모 엔터티의 기본 키 + 고유 식별 속성
사용 목적약한 엔터티의 인스턴스 식별약한 엔터티 내 고유한 레코드 식별
종속성부모 엔터티의 키에 완전히 의존부모 엔터티의 키와 내부 속성에 의존
예시주문(주문 ID) → 주문 항목(주문 ID + 순번)학생(학번) → 성적(학번 + 과목코드)

속성 (Attribute)

개념

  • 엔터티를 구성하는 데이터 요소로, 특정 개체의 정보를 표현하는 속성 값으로 이루어짐
  • 엔터티의 특성이나 상태를 설명하는 데이터의 최소 단위

특징

  1. 고유성
    • 특정 엔터티 내에서 의미가 명확해야 함
  2. 원자성
    • 하나의 속성은 하나의 값만 가짐
    • 데이터의 일관성과 정규화를 위해 필수적
  3. 도메인 제약
    • 특정한 값의 범위를 가짐
    • 유형
      • 데이터 타입 제약
      • 값의 범위 제약
      • 형식 제약
    • 예시
      • age: 0 ~ 150 사이의 정수
      • email: RFC 5322 표준 형식
      • phoneNumber: “+82-10-1234-5678” 형식

함수적 종속성

  • 속성 간의 논리적 연관성을 나타냄
  • 한 속성의 값이 다른 속성의 값을 결정하는 관계
    • 예시: 학생 테이블에서 “학번 → 이름” 관계가 성립하면, 학번이 동일하면 이름이 동일해야 함

1. 완전 함수적 종속성 (Full Functional Dependency)

  • 정의
    • 복합 키의 모든 속성이 다른 속성을 결정할 때
  • 예시

    1
    2
    
      복합 키 (주문ID, 상품ID) → 주문금액
      단일 주문ID나 상품ID만으로는 주문금액을 결정할 수 없음
    

2. 부분 함수적 종속성 (Partial Functional Dependency)

  • 정의
    • 복합 키의 일부 속성만으로 다른 속성이 결정될 수 있을 때
  • 예시

    1
    2
    3
    
        
      (주문ID, 상품ID) → 주문날짜
      주문ID만으로도 주문날짜를 결정할 수 있음
    

3. 이행적 함수 종속성 (Transitive Functional Dependency)

  • 정의
    • A → B, B → C 관계에서 A → C가 성립하는 경우
  • 예시

    1
    2
    3
    
      학생ID → 학과코드
      학과코드 → 학과명
      따라서, 학생ID → 학과명 (이행적 함수 종속성)
    

분류

1. 구조에 따른 분류

  1. 단순 속성 (Simple Attribute)
    • 더 이상 분해할 수 없는 원자적 속성
    • 예시
      • 이름, 나이, 이메일
  2. 복합 속성 (Composite Attribute)
    • 여러 하위 속성으로 구성된 속성
    • 예시

      1
      2
      3
      4
      5
      6
      
        주소 {
          거리명
          도시
          우편번호
          국가
        }
      

2. 값의 특성에 따른 분류

  1. 단일값 속성 (single-valued attribute)
    • 한 번에 하나의 값만 가짐
    • 예시
      • 이름, 나이, 주소
  2. 다중값 속성 (Multi-valued Attribute)
    • 하나의 엔터티가 여러 값을 가질 수 있음
    • 예시

      1
      2
      3
      4
      5
      
        전화번호: [
          "010-1234-5678",
          "02-123-4567"
        ]
        취미: ["독서", "여행", "음악"]
      

3. 유도 방식에 따른 분류

  1. 기본 속성 (Base Attribute)
    • 엔터티에 내재된 원래의 속성
    • 직접 입력되거나 관찰되는 속성
    • 예시
      • 고객 이름, 제품 가격
  2. 유도 속성 (Derived Attribute)
    • 다른 속성들로부터 계산되거나 유도되는 속성
    • 예시
      • 나이 = 현재년도 - 출생년도
      • 총주문금액 = 단가 * 수량
      • 할인율 = 원가 - 판매가

4. 식별 특성에 따른 분류

  1. 키 속성(key attribute)
    • 엔터티를 고유하게 식별하는 속성
    • 유형
      • PK(Primary Key, 기본키) : 인스턴스를 식별할 수 있는 속성
      • FK(Foreign Key, 외래키) : 다른 엔터티와의 관계에 포함되는 속성
    • 예시
      • 학생ID, 주문번호, 사원번호
  2. 설명 속성(Descriptive Attribute)
    • 엔터티의 특성을 추가로 설명하는 속성
    • 예시
      • 설명, 비고, 메모

5. 시간 관련 속성

  1. 현재 상태 속성
    • 현재 시점의 상태를 나타내는 속성
    • 예시
      • 직원의 현재 직급, 제품의 현재 재고
  2. 이력 추적 속성
    • 변경 이력을 관리하는 속성
    • 예시

      1
      2
      3
      4
      5
      6
      7
      8
      
        직원 {
            직원ID
            현재직급
            직급변경이력: [
                { 날짜: '2022-01-01', 직급: '주임' },
                { 날짜: '2023-06-01', 직급: '대리' }
            ]
        }
      

관계 (Relationship)

개념

  • 두 개 이상의 엔터티 간의 연관성
  • 데이터 모델에서 엔터티 간의 연결 구조
  • 엔터티 간의 업무적, 논리적 연관성을 표현

종류

1. 연관성의 본질에 따른 분류

  1. 존재적 관계 (Existential Relationship)
    • 엔터티의 존재 자체와 직접적으로 연관된 관계
    • 엔터티의 생성, 소멸, 정체성과 밀접한 관계
    • 예시
      • 학생 ↔ 사용자 계정
      • 직원 ↔ 부서
      • 제품 ↔ 제조사
  2. 행위적 관계 (Behavioral Relationship)
    • 엔터티 간의 특정 행동이나 상호작용을 나타내는 관계
    • 동적이고 프로세스 중심적인 관계
    • 예시
      • 고객 ↔ 주문
      • 학생 ↔ 수강과목
      • 직원 ↔ 프로젝트

2. 연결 방식에 따른 관계 유형

  1. 일대일 관계 (1:1)
    • 각 엔터티의 인스턴스가 상대방의 단 하나의 인스턴스와 연결
    • 유형
      1. 완전 일대일 관계 (강한 1:1)
        • 양쪽 엔터티의 모든 인스턴스가 반드시 연결
      2. 선택적 일대일 관계 (약한 1:1)
        • 일부 인스턴스만 연결 가능
    • 예시
      • 사용자 ↔ 프로필
      • 직원 ↔ 개인정보
      • 학생 ↔ 장학금 정보
  2. 일대다 관계 (1:N)
    • 한 엔터티의 단일 인스턴스가 다른 엔터티의 여러 인스턴스와 연결
    • 유형
      1. 완전 일대다 관계
        • 모든 하위 엔터티 인스턴스가 상위 엔터티와 연결
      2. 선택적 일대다 관계
        • 일부 하위 엔터티 인스턴스만 연결 가능
    • 예시
      • 부서 ↔ 직원
      • 학교 ↔ 학생
      • 회사 ↔ 프로젝트
  3. 다대다 관계 (M:N)
    • 양쪽 엔터티의 여러 인스턴스가 서로 연결
    • 일반적으로 중간 엔터티(연결 엔터티)를 통해 구현
    • 예시
      • 학생 ↔ 수강과목
      • 저자 ↔ 도서
      • 직원 ↔ 프로젝트

구성 요소

  1. 관계 이름
    • 엔터티 간 연결의 의미를 명확히 설명
    • 동사나 명사로 표현
    • 예시
      • “소속된다”, “수강한다”
      • “고용”, “관리”
  2. 카디널리티 (Cardinality)
    • 관계에서 참여 가능한 인스턴스의 수
    • 최소 카디널리티와 최대 카디널리티로 표현
    • 예시
      • 부서(1) ↔ 직원(0..*)
      • 교수(1) ↔ 강의(1..*)
  3. 차수 (Degree)
    • 관계에 참여하는 엔터티의 수
    • 유형
      1. 이항 관계 (Binary Relationship)
        • 두 개의 엔터티 간 관계
      2. 삼항 관계 (Ternary Relationship)
        • 세 개의 엔터티 간 관계
    • 예시
      • 학생 - 강의 (이항 관계)
      • 프로젝트 - 직원 - 부서 (삼항 관계)
  4. 페어링 (Pairing)
    • 엔터티 간 연결 메커니즘
    • 강한 관계(Strong Relationship)
      • 필수적으로 존재해야 하는 관계
      • 예시: 주문과 주문 항목
    • 약한 관계(Weak Relationship)
      • 필요에 따라 존재할 수 있는 관계
      • 예시: 직원과 프로젝트 참여
    • 주요 구현 방식
      1. 외래 키 (Foreign Key)
        • 관계형 데이터베이스에서 가장 일반적인 방식
      2. 연결 테이블 (Associative Entity)
        • 다대다 관계에서 주로 사용
      3. 참조 (Reference)
        • 객체지향 모델링에서 사용

모델링 패턴

1. 다형성 관계 (Polymorphic Relationship)

  • 한 엔터티가 여러 타입의 다른 엔터티와 관계를 맺을 수 있는 패턴
  • 예시: 댓글 시스템

    1
    2
    3
    4
    5
    6
    7
    
      댓글 {
          댓글ID
          내용
          작성자ID
          대상엔터티타입: ['게시글', '제품', '이벤트']
          대상엔터티ID
      }
    

2. 자기 참조 관계 (Self-Referencing Relationship)

  • 동일한 엔터티 내에서의 관계
  • 예시: 조직도, 댓글의 대댓글

    1
    2
    3
    4
    5
    
      직원 {
          직원ID
          이름
          상위관리자ID  # 다른 직원을 참조
      }
    

식별자 (Identifier)

개념

  • 데이터베이스에서 각 인스턴스를 고유하고 유일하게 구분하는 속성 또는 속성들의 조합
  • 데이터의 정확성과 무결성을 보장하는 핵심 메커니즘

특징

  1. 유일성
    • 동일한 엔터티 내에서 각 인스턴스는 고유해야 함
    • 중복된 식별자는 데이터 무결성을 훼손
    • 예시
    1
    2
    3
    4
    5
    6
    7
    8
    
     학생 엔터티:
     ✓ 학번이 각각 다른 경우
     - 20231001: 김철수
     - 20231002: 이영희
        
     ✗ 중복된 학번은 허용되지 않음
     - 20231001: 김철수
     - 20231001: 박민수 (X)
    
  2. 최소성
    • 식별에 꼭 필요한 최소한의 속성으로 구성
    • 불필요한 속성 배제
    • 데이터 저장 공간과 성능 최적화
    • 예시
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
     // 비효율적인 복합 키
     학생 {
       이름 + 전화번호 + 생년월일
     }
        
     // 최소성을 고려한 효율적인 식별자
     학생 {
       학번 (단일 속성으로 충분)
     }
    
  3. 불변성
    • 가급적 변경되지 않아야 함
    • 시간이 지나도 유지되는 안정성
    • 예시
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
     // 변경 가능성이 높은 식별자 (비권장)
     학생 {
       현재이메일
     }
        
     // 불변성이 높은 식별자 (권장)
     학생 {
       학번
       최초생성이메일
     }
    
  4. 인덱싱 효율성
    • 데이터베이스에서 검색 성능을 높이기 위해 활용됨

분류

  1. 자연 키 (Natural Key)
    • 업무적으로 의미 있는 속성
    • 비즈니스 로직과 직접적으로 연관
    • 장점
      • 비즈니스 의미 포함
      • 직관적 이해
    • 단점
      • 변경 가능성
      • 개인정보 보호 문제
      • 보안 취약성
    • 예시
      • 학번(StudentID)
      • 주민등록번호(Social Security Number)
      • 차량 번호판(Vehicle Plate Number)
  2. 인조 키 (Surrogate Key)
    • 인위적으로 생성된 고유 식별자
    • 데이터베이스에서 자동 증가 값(Auto Increment)으로 관리
    • 장점
      • 완전한 고유성
      • 변경 불가
      • 성능 최적화
    • 단점
      • 비즈니스 의미 부재
      • 가독성 저하
    • 예시
      • 데이터베이스의 ID 필드 (Primary Key: Auto Increment)
      • UUID (Universally Unique Identifier)
      • 주문번호(OrderID)
  3. 복합 키 (Composite Key)
    • 두 개 이상의 속성을 조합하여 유일성을 보장하는 키
    • 예시
      • (학생ID, 과목코드) → 성적 테이블
      • (주문ID, 상품ID) → 주문 상세 테이블
  4. 대리 키 (Alternate Key)
    • 기본 키 외에 고유성을 가진 대체 식별자
    • 기본 키 후보 중 선택되지 않은 키
    • 예시
      • 이메일(Email) (기본 키 대신 대체 키로 사용 가능)
      • 전화번호(Phone Number)

주요 개념

  1. 기본 키 (Primary Key, PK)
    • 엔터티의 각 인스턴스를 고유하게 식별하는 속성
    • 예시
      • 학번(StudentID), 주문번호(OrderID)
  2. 외래 키 (Foreign Key, FK)
    • 다른 엔터티의 기본 키를 참조하는 속성
    • 예시
      • 주문 테이블의 고객ID(CustomerID → 고객 테이블의 기본 키 참조)
  3. 후보 키 (Candidate Key)
    • 기본 키가 될 수 있는 후보 속성들
    • 예시
      • 학번(StudentID), 주민등록번호(SSN), 이메일(Email)
  4. 유니크 키 (Unique Key)
    • 중복을 허용하지 않지만, NULL 값은 가질 수 있음
    • 예시
      • 사용자 계정의 이메일 주소(Email), 사원번호(Employee Number)
  5. 슈퍼 키 (Super Key)
    • 한 개 이상의 속성으로 구성되며, 테이블 내에서 유일한 레코드를 식별할 수 있는 속성 집합
    • 후보 키, 기본 키를 포함하는 개념
    • 예시
      • (이메일, 전화번호), (학번, 이름)

비교

식별자 유형대표성유일성최소성
기본 키OOO
외래 키XXX
후보 키OOO
유니크 키XOX
슈퍼 키OOX
This post is licensed under CC BY 4.0 by the author.