[SQLD] 2. 엔터티(Entity), 속성(Attribute), 관계(Relationship), 식별자(Identifier)
[SQLD] 2. 엔터티(Entity), 속성(Attribute), 관계(Relationship), 식별자(Identifier)
엔터티 (Entity)
개념
- 엔터티는 데이터베이스에서 독립적으로 존재하는 객체나 개념
- 실제 세계의 사물, 사건, 또는 개념을 데이터베이스 내에서 표현하는 논리적 단위
특징
- 고유성
- 하나의 엔터티는 다른 엔터티와 구별되는 특성을 가져야 함
- 고유한 식별자를 통해 식별 가능 (학번 등)
- 속성 보유
- 데이터를 표현하는 속성을 가져야 함
- 인스턴스는 각 속성에 대해 1개의 값만 가질 수 있음
- 인스턴스의 집합
- 하나의 엔터티는 여러 개의 인스턴스(행, 레코드)를 가질 수 있음
- 관계 가능
- 다른 엔터티와 관계를 맺을 수 있어야 함
분류
유형과 무형에 따른 분류
- 유형 엔터티 (Tangible Entity)
- 물리적으로 존재하는 엔터티
- 예시: 학생, 직원, 제품
- 개념 엔터티 (Conceptual Entity)
- 추상적인 개념을 나타내는 엔터티
- 예시: 강의, 프로젝트, 계약
- 사건 엔터티 (Event Entity)
- 특정 시점에 발생하는 사건을 나타내는 엔터티
- 예시: 주문, 예약, 결제
발생 시점에 따른 분류
- 기본 엔터티 (Fundamental Entity)
- 독립적으로 존재하며, 다른 엔터티에 의해 의존되지 않는 엔터티
- 예시: 고객, 제품
- 중심 엔터티 (Core Entity)
- 여러 개의 엔터티와 관계를 가지며, 데이터 모델의 중심이 되는 엔터티
- 예시: 주문, 예약
- 행위 엔터티 (Action Entity)
- 특정 행위나 이벤트를 나타내는 엔터티로, 발생하는 시점에 따라 데이터를 저장
- 예시: 거래 내역, 출석 기록
엔터티의 특성에 따른 분류
- 강한 엔터티 (Strong Entity)
- 자체적으로 존재 가능한 엔터티
- 독립적인 기본 키(Primary Key, PK)를 가짐
- 다른 엔터티에 의존하지 않음
- 예시: 학생(Student), 교수(Professor), 강의(Course)
- 약한 엔터티 (Weak Entity)
- 독립적으로 존재할 수 없는 엔터티
- 부모 엔터티(Strong Entity)의 기본 키를 참조하여 유일성을 확보
- 고유한 기본 키를 가지지 않으며, 부모 엔터티의 키와 함께 부분 키(Partial Key)를 가짐
- 식별 관계(Identifying Relationship)를 통해 부모 엔터티의 기본 키를 상속
- 예시
- 주문(주문 ID) → 주문 항목(구분자 키: 주문 ID + 상품 ID)
- 학생(학번) → 성적(구분자 키: 학번 + 과목코드)
부분 키(Partial Key)와 구분자 키(Discriminating Key)의 차이점 정리
구분 부분 키 (Partial Key) 구분자 키 (Discriminating Key) 정의 약한 엔터티의 고유성을 부여하는 속성 집합 약한 엔터티 내에서 고유성을 결정하는 속성 구성 요소 부모 엔터티의 기본 키 + 내부 식별 속성 부모 엔터티의 기본 키 + 고유 식별 속성 사용 목적 약한 엔터티의 인스턴스 식별 약한 엔터티 내 고유한 레코드 식별 종속성 부모 엔터티의 키에 완전히 의존 부모 엔터티의 키와 내부 속성에 의존 예시 주문(주문 ID) → 주문 항목(주문 ID + 순번) 학생(학번) → 성적(학번 + 과목코드)
속성 (Attribute)
개념
- 엔터티를 구성하는 데이터 요소로, 특정 개체의 정보를 표현하는 속성 값으로 이루어짐
- 엔터티의 특성이나 상태를 설명하는 데이터의 최소 단위
특징
- 고유성
- 특정 엔터티 내에서 의미가 명확해야 함
- 원자성
- 하나의 속성은 하나의 값만 가짐
- 데이터의 일관성과 정규화를 위해 필수적
- 도메인 제약
- 특정한 값의 범위를 가짐
- 유형
- 데이터 타입 제약
- 값의 범위 제약
- 형식 제약
- 예시
- 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. 구조에 따른 분류
- 단순 속성 (Simple Attribute)
- 더 이상 분해할 수 없는 원자적 속성
- 예시
- 이름, 나이, 이메일
- 복합 속성 (Composite Attribute)
- 여러 하위 속성으로 구성된 속성
예시
1 2 3 4 5 6
주소 { 거리명 도시 우편번호 국가 }
2. 값의 특성에 따른 분류
- 단일값 속성 (single-valued attribute)
- 한 번에 하나의 값만 가짐
- 예시
- 이름, 나이, 주소
- 다중값 속성 (Multi-valued Attribute)
- 하나의 엔터티가 여러 값을 가질 수 있음
예시
1 2 3 4 5
전화번호: [ "010-1234-5678", "02-123-4567" ] 취미: ["독서", "여행", "음악"]
3. 유도 방식에 따른 분류
- 기본 속성 (Base Attribute)
- 엔터티에 내재된 원래의 속성
- 직접 입력되거나 관찰되는 속성
- 예시
- 고객 이름, 제품 가격
- 유도 속성 (Derived Attribute)
- 다른 속성들로부터 계산되거나 유도되는 속성
- 예시
- 나이 = 현재년도 - 출생년도
- 총주문금액 = 단가 * 수량
- 할인율 = 원가 - 판매가
4. 식별 특성에 따른 분류
- 키 속성(key attribute)
- 엔터티를 고유하게 식별하는 속성
- 유형
- PK(Primary Key, 기본키) : 인스턴스를 식별할 수 있는 속성
- FK(Foreign Key, 외래키) : 다른 엔터티와의 관계에 포함되는 속성
- 예시
- 학생ID, 주문번호, 사원번호
- 설명 속성(Descriptive Attribute)
- 엔터티의 특성을 추가로 설명하는 속성
- 예시
- 설명, 비고, 메모
5. 시간 관련 속성
- 현재 상태 속성
- 현재 시점의 상태를 나타내는 속성
- 예시
- 직원의 현재 직급, 제품의 현재 재고
- 이력 추적 속성
- 변경 이력을 관리하는 속성
예시
1 2 3 4 5 6 7 8
직원 { 직원ID 현재직급 직급변경이력: [ { 날짜: '2022-01-01', 직급: '주임' }, { 날짜: '2023-06-01', 직급: '대리' } ] }
관계 (Relationship)
개념
- 두 개 이상의 엔터티 간의 연관성
- 데이터 모델에서 엔터티 간의 연결 구조
- 엔터티 간의 업무적, 논리적 연관성을 표현
종류
1. 연관성의 본질에 따른 분류
- 존재적 관계 (Existential Relationship)
- 엔터티의 존재 자체와 직접적으로 연관된 관계
- 엔터티의 생성, 소멸, 정체성과 밀접한 관계
- 예시
- 학생 ↔ 사용자 계정
- 직원 ↔ 부서
- 제품 ↔ 제조사
- 행위적 관계 (Behavioral Relationship)
- 엔터티 간의 특정 행동이나 상호작용을 나타내는 관계
- 동적이고 프로세스 중심적인 관계
- 예시
- 고객 ↔ 주문
- 학생 ↔ 수강과목
- 직원 ↔ 프로젝트
2. 연결 방식에 따른 관계 유형
- 일대일 관계 (1:1)
- 각 엔터티의 인스턴스가 상대방의 단 하나의 인스턴스와 연결
- 유형
- 완전 일대일 관계 (강한 1:1)
- 양쪽 엔터티의 모든 인스턴스가 반드시 연결
- 선택적 일대일 관계 (약한 1:1)
- 일부 인스턴스만 연결 가능
- 완전 일대일 관계 (강한 1:1)
- 예시
- 사용자 ↔ 프로필
- 직원 ↔ 개인정보
- 학생 ↔ 장학금 정보
- 일대다 관계 (1:N)
- 한 엔터티의 단일 인스턴스가 다른 엔터티의 여러 인스턴스와 연결
- 유형
- 완전 일대다 관계
- 모든 하위 엔터티 인스턴스가 상위 엔터티와 연결
- 선택적 일대다 관계
- 일부 하위 엔터티 인스턴스만 연결 가능
- 완전 일대다 관계
- 예시
- 부서 ↔ 직원
- 학교 ↔ 학생
- 회사 ↔ 프로젝트
- 다대다 관계 (M:N)
- 양쪽 엔터티의 여러 인스턴스가 서로 연결
- 일반적으로 중간 엔터티(연결 엔터티)를 통해 구현
- 예시
- 학생 ↔ 수강과목
- 저자 ↔ 도서
- 직원 ↔ 프로젝트
구성 요소
- 관계 이름
- 엔터티 간 연결의 의미를 명확히 설명
- 동사나 명사로 표현
- 예시
- “소속된다”, “수강한다”
- “고용”, “관리”
- 카디널리티 (Cardinality)
- 관계에서 참여 가능한 인스턴스의 수
- 최소 카디널리티와 최대 카디널리티로 표현
- 예시
- 부서(1) ↔ 직원(0..*)
- 교수(1) ↔ 강의(1..*)
- 차수 (Degree)
- 관계에 참여하는 엔터티의 수
- 유형
- 이항 관계 (Binary Relationship)
- 두 개의 엔터티 간 관계
- 삼항 관계 (Ternary Relationship)
- 세 개의 엔터티 간 관계
- 이항 관계 (Binary Relationship)
- 예시
- 학생 - 강의 (이항 관계)
- 프로젝트 - 직원 - 부서 (삼항 관계)
- 페어링 (Pairing)
- 엔터티 간 연결 메커니즘
- 강한 관계(Strong Relationship)
- 필수적으로 존재해야 하는 관계
- 예시: 주문과 주문 항목
- 약한 관계(Weak Relationship)
- 필요에 따라 존재할 수 있는 관계
- 예시: 직원과 프로젝트 참여
- 주요 구현 방식
- 외래 키 (Foreign Key)
- 관계형 데이터베이스에서 가장 일반적인 방식
- 연결 테이블 (Associative Entity)
- 다대다 관계에서 주로 사용
- 참조 (Reference)
- 객체지향 모델링에서 사용
- 외래 키 (Foreign Key)
모델링 패턴
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 2 3 4 5 6 7 8
학생 엔터티: ✓ 학번이 각각 다른 경우 - 20231001: 김철수 - 20231002: 이영희 ✗ 중복된 학번은 허용되지 않음 - 20231001: 김철수 - 20231001: 박민수 (X)
- 최소성
- 식별에 꼭 필요한 최소한의 속성으로 구성
- 불필요한 속성 배제
- 데이터 저장 공간과 성능 최적화
- 예시
1 2 3 4 5 6 7 8 9
// 비효율적인 복합 키 학생 { 이름 + 전화번호 + 생년월일 } // 최소성을 고려한 효율적인 식별자 학생 { 학번 (단일 속성으로 충분) }
- 불변성
- 가급적 변경되지 않아야 함
- 시간이 지나도 유지되는 안정성
- 예시
1 2 3 4 5 6 7 8 9 10
// 변경 가능성이 높은 식별자 (비권장) 학생 { 현재이메일 } // 불변성이 높은 식별자 (권장) 학생 { 학번 최초생성이메일 }
- 인덱싱 효율성
- 데이터베이스에서 검색 성능을 높이기 위해 활용됨
분류
- 자연 키 (Natural Key)
- 업무적으로 의미 있는 속성
- 비즈니스 로직과 직접적으로 연관
- 장점
- 비즈니스 의미 포함
- 직관적 이해
- 단점
- 변경 가능성
- 개인정보 보호 문제
- 보안 취약성
- 예시
- 학번(StudentID)
- 주민등록번호(Social Security Number)
- 차량 번호판(Vehicle Plate Number)
- 인조 키 (Surrogate Key)
- 인위적으로 생성된 고유 식별자
- 데이터베이스에서 자동 증가 값(Auto Increment)으로 관리
- 장점
- 완전한 고유성
- 변경 불가
- 성능 최적화
- 단점
- 비즈니스 의미 부재
- 가독성 저하
- 예시
- 데이터베이스의 ID 필드 (Primary Key: Auto Increment)
- UUID (Universally Unique Identifier)
- 주문번호(OrderID)
- 복합 키 (Composite Key)
- 두 개 이상의 속성을 조합하여 유일성을 보장하는 키
- 예시
- (학생ID, 과목코드) → 성적 테이블
- (주문ID, 상품ID) → 주문 상세 테이블
- 대리 키 (Alternate Key)
- 기본 키 외에 고유성을 가진 대체 식별자
- 기본 키 후보 중 선택되지 않은 키
- 예시
- 이메일(Email) (기본 키 대신 대체 키로 사용 가능)
- 전화번호(Phone Number)
주요 개념
- 기본 키 (Primary Key, PK)
- 엔터티의 각 인스턴스를 고유하게 식별하는 속성
- 예시
- 학번(StudentID), 주문번호(OrderID)
- 외래 키 (Foreign Key, FK)
- 다른 엔터티의 기본 키를 참조하는 속성
- 예시
- 주문 테이블의 고객ID(CustomerID → 고객 테이블의 기본 키 참조)
- 후보 키 (Candidate Key)
- 기본 키가 될 수 있는 후보 속성들
- 예시
- 학번(StudentID), 주민등록번호(SSN), 이메일(Email)
- 유니크 키 (Unique Key)
- 중복을 허용하지 않지만, NULL 값은 가질 수 있음
- 예시
- 사용자 계정의 이메일 주소(Email), 사원번호(Employee Number)
- 슈퍼 키 (Super Key)
- 한 개 이상의 속성으로 구성되며, 테이블 내에서 유일한 레코드를 식별할 수 있는 속성 집합
- 후보 키, 기본 키를 포함하는 개념
- 예시
- (이메일, 전화번호), (학번, 이름)
비교
식별자 유형 | 대표성 | 유일성 | 최소성 |
---|---|---|---|
기본 키 | O | O | O |
외래 키 | X | X | X |
후보 키 | O | O | O |
유니크 키 | X | O | X |
슈퍼 키 | O | O | X |
This post is licensed under CC BY 4.0 by the author.