Chapter 1-3: 관계(Relationship)와 식별자(Identifier)
데이터 모델링에서 중요한 개념 중 하나는 관계(Relationship)와 식별자(Identifier)입니다. 관계는 엔티티 간의 연관성을 정의하고, 식별자는 각 엔티티의 개별 인스턴스를 구별하는 역할을 합니다. 이 두 개념을 이해하면 데이터베이스의 구조를 보다 효율적으로 설계할 수 있습니다.
하단은 데이터베이스 설계 기말 과제로 설계했던 ERD 다이어그램입니다 ㅎㅎ
1. 관계(Relationship)란?
관계(Relationship)는 두 개 이상의 엔티티 간의 연관성을 나타내는 개념입니다. 관계는 ERD(Entity-Relationship Diagram)에서 마름모(Diamond) 형태로 표현되며, 데이터베이스에서는 외래 키(Foreign Key, FK)로 구현됩니다.
관계의 유형:
- 존재 관계
- 행위 관계
- 연관 관계
- 의존 관계
1) 존재 관계 (Existence Relationship)
존재 관계는 한 엔티티가 존재하기 위해 반드시 다른 엔티티가 필요할 때 발생하는 관계입니다.
즉, 특정 엔티티가 다른 엔티티 없이는 의미를 가지지 못하는 경우입니다.
- 엔티티 A가 존재하려면 반드시 엔티티 B가 존재해야 함.
- ER 다이어그램에서는 **이중 선(double line)**으로 표시.
- 존재적 종속 관계를 가짐.
📌 예제
- 사원(Employee) - 부서(Department) 관계
- 모든 사원은 반드시 하나의 부서에 속해야 한다.
- 사원의 존재는 부서의 존재에 의존적이다.
📍 ER 다이어그램 예시
사원 === 속함 === 부서
(Employee) (Belongs to) (Department)
💡 부서가 존재하지 않으면 사원도 존재할 수 없다는 점이 핵심!
2) 행위 관계 (Action Relationship)
행위 관계는 어떤 엔티티가 특정 행위를 수행할 때 발생하는 관계입니다.
즉, 존재 자체보다는 행위를 통해 관계가 형성됩니다.
- 한 엔티티가 특정 작업을 수행할 때 관계가 형성됨.
- ER 다이어그램에서는 **단일 선(single line)**으로 표시.
- 관계가 엔티티의 행동에 의해 동적으로 생성될 수 있음.
📌 예제
- 고객(Customer) - 주문(Order) 관계
- 고객이 주문을 수행할 수 있다.
- 주문은 고객의 특정 행위를 통해 생성됨.
📍 ER 다이어그램 예시
고객 --- 주문 --- 제품
(Customer) (Places) (Product)
💡 고객이 주문을 하지 않더라도 고객은 존재할 수 있음!
3) 연관 관계 (Association Relationship)
연관 관계는 두 엔티티가 서로 관계를 가지지만 독립적으로 존재할 수 있는 관계입니다.
즉, 특정 엔티티가 관계를 가지지 않더라도 개별적으로 존재할 수 있습니다.
- 두 엔티티가 독립적으로 존재 가능.
- 다대다(M:N) 관계일 수 있음.
- ER 다이어그램에서는 **단일 선(single line)**으로 표시.
📌 예제
- 의사(Doctor) - 환자(Patient) 관계
- 의사와 환자는 각각 독립적으로 존재 가능하지만, 진료(Consultation)라는 관계를 가질 수 있음.
📍 ER 다이어그램 예시
의사 --- 진료 --- 환자
(Doctor) (Consults) (Patient)
💡 진료를 받지 않더라도 의사와 환자는 각각 존재할 수 있음!
4) 의존 관계 (Dependency Relationship)
의존 관계는 한 엔티티가 반드시 다른 엔티티에 의존하여 존재하는 관계입니다.
즉, 엔티티 B가 존재하지 않으면 엔티티 A도 존재할 수 없습니다.
- 하나의 엔티티가 다른 엔티티에 의존적.
- 부모-자식 관계 형성 가능.
- ER 다이어그램에서 외래 키(Foreign Key)로 표현.
📌 예제
- 주문(Order) - 주문 상세(Order Detail) 관계
- 주문 상세(Order Detail)는 특정 주문(Order)에 속해야 함.
- 주문이 삭제되면 주문 상세도 함께 삭제되어야 함.
📍 ER 다이어그램 예시
주문 --- 주문 상세
(Order) (Order Detail)
💡 주문이 없으면 주문 상세도 존재할 수 없음!
5) 관계 유형 비교
존재 관계 | 특정 엔티티가 다른 엔티티 없이는 존재할 수 없음. | 사원 - 부서 |
행위 관계 | 특정 행위를 수행할 때 발생하는 관계. | 고객 - 주문 |
연관 관계 | 두 엔티티가 독립적으로 존재하면서 관계를 가질 수 있음. | 의사 - 환자 |
의존 관계 | 하나의 엔티티가 반드시 다른 엔티티에 의존해야 존재할 수 있음. | 주문 - 주문 상세 |
2. 관계의 종류
관계는 크게 일대일(1:1), 일대다(1:N), 다대다(N:M) 관계로 나뉩니다.
① 일대일(1:1) 관계
- 하나의 엔티티가 다른 엔티티의 하나의 인스턴스와만 연결됨
- 예: 사용자(User) - 사용자 프로필(Profile) 관계
사용자(User) | 사용자 프로필(Profile) |
사용자 ID (PK) | 프로필 ID (PK, FK) |
이름 | 생년월일 |
💡 한 명의 사용자는 하나의 프로필만 가질 수 있음
② 일대다(1:N) 관계
- 하나의 엔티티가 여러 개의 다른 엔티티와 연결될 수 있음
- 예: 고객(Customer) - 주문(Order) 관계
고객(Customer) | 주문(Order) |
고객 ID (PK) | 주문 ID (PK) |
이름 | 주문 날짜 |
연락처 | 고객 ID (FK) |
💡 한 명의 고객은 여러 개의 주문을 할 수 있음
③ 다대다(N:M) 관계
- 여러 개의 엔티티가 서로 여러 개의 엔티티와 연결될 수 있음
- 예: 학생(Student) - 강의(Course) 관계
학생(Student) | 수강(Student_Course) | 강의(Course) |
학생 ID (PK) | 학생 ID (FK) | 강의 ID (PK) |
이름 | 강의 ID (FK) | 강의명 |
💡 한 명의 학생은 여러 개의 강의를 수강할 수 있고, 하나의 강의에는 여러 명의 학생이 참여할 수 있음 → 중간 테이블(Student_Course) 필요
3. 식별자(Identifier)란?
식별자(Identifier)는 엔티티의 각 인스턴스를 고유하게 구별할 수 있는 속성을 의미합니다. 데이터베이스에서는 기본 키(Primary Key, PK)로 구현됩니다. 식별자는 크게 주 식별자(Primary Identifier), 보조 식별자(Secondary Identifier), 외래 식별자(Foreign Key)로 나뉩니다.
3.1 식별자의 유형
1) 대표성 여부
- 주 식별자(Primary Key, PK): 엔티티의 개별 인스턴스를 구별하는 유일한 속성 (=기본 키 PK)
- 보조 식별자(Candidate Key): 기본 키가 될 수 있는 후보 키 중 하나로, 유일성을 가지지만 선택되지 않은 키(=후보키)
2) 스스로 생성되었는지 여부
- 내부 식별자(Internal Identifier): 해당 엔티티 내에서 독립적으로 생성된 식별자 (예: 고객 ID, 주문 ID)
- 외부 식별자(External Identifier): 다른 엔티티의 식별자를 참조하는 속성 (예: 주문 테이블의 고객 ID) = 외래키(FK)
3) 단일 속성 여부
- 단일 식별자(Simple Identifier): 단일 속성으로 구성된 식별자 (예: 주민등록번호, 사원 ID)
- 복합 식별자(Composite Identifier): 두 개 이상의 속성으로 구성된 식별자 (예: 수강 기록의 학생 ID + 강의 ID) \
- 복합 식별자를 슈퍼키(Super Key)라고도 함
4) 대체 여부
- 원조 식별자(Natural Identifier): 현실 세계에서 자연스럽게 사용되는 식별자 (예: 주민등록번호, 이메일)
- 인조 식별자(Surrogate Identifier): 시스템에서 자동 생성된 식별자 (예: 데이터베이스에서 자동 증가하는 ID 값)
① 주 식별자(Primary Key, PK)
- 유일성: 각 인스턴스에 유니크함을 부여하여 식별이 가능하도록 한다.
- 최소성: 유일성을 보장하는 최소 개수의 속성이여야한다.
- 불변성: 속성값이 되도록 변하지 않아야한다.
- 존재성: 속성값이 NULL일 수 없다.
📌 예제 (고객 테이블)
고객 ID (PK) | 이름 | 연락처 |
101 | 홍길동 | 010-1234-5678 |
102 | 이영희 | 010-5678-1234 |
✅ 고객 ID는 각 고객을 식별하는 유일한 값이므로 PK가 될 수 있음
② 보조 식별자(Secondary Key)
- 주 식별자가 아닌 다른 속성 중에서도 유일성을 가지는 속성
- 예: 이메일(Email), 주민등록번호(SSN)
📌 예제 (사용자 테이블)
사용자 ID (PK) | 이름 | 이메일(보조 식별자) |
1001 | 김민수 | minsu@example.com |
1002 | 이지현 | jihyun@example.com |
✅ 이메일은 각 사용자가 유일하게 가질 수 있지만, 기본 키로 설정되지 않은 속성
③ 외래 식별자(Foreign Key, FK)
- 다른 엔티티의 주 식별자를 참조하는 속성
- 두 엔티티 간의 관계를 정의하는 역할
📌 예제 (주문 테이블)
주문 ID (PK) | 주문 날짜 | 고객 ID (FK) |
5001 | 2024-02-10 | 101 |
5002 | 2024-02-11 | 102 |
✅ 고객 ID는 고객 엔티티(Customer)의 고객 ID (PK)를 참조하는 외래 키(FK)
3.2 식별자 VS 비식별자
4. 관계와 식별자의 연결
관계와 식별자는 데이터베이스에서 서로 밀접하게 연결되어 있습니다.
엔티티 간의 관계를 정의할 때, 외래 키(FK)를 사용하여 관계를 표현하고, 식별자(PK)를 사용하여 데이터를 구별합니다.
📌 관계 & 식별자 적용 예제
고객(Customer) 주문(Order)
고객 ID (PK) | 주문 ID (PK) |
이름 | 주문 날짜 |
연락처 | 고객 ID (FK) |
- 고객 ID는 고객 엔티티에서 기본 키(PK)
- 주문 테이블에서는 고객 ID를 외래 키(FK)로 사용하여 관계를 형성
✅ 이러한 관계를 통해 고객이 주문한 내역을 쉽게 조회할 수 있음
5. 마무리
이번 포스팅에서는 관계(Relationship)와 식별자(Identifier)에 대해 다루었습니다.
🔹 존재 관계: 특정 엔티티가 반드시 다른 엔티티에 속해야 할 때
🔹 행위 관계: 특정 행동이 수행될 때 관계가 형성될 때
🔹 연관 관계: 독립적인 엔티티가 서로 관계를 가질 수 있을 때
🔹 의존 관계: 하나의 엔티티가 다른 엔티티 없이는 존재할 수 없을 때
✅ 관계(Relationship)는 엔티티 간의 연관성을 정의하며, 일대일(1:1), 일대다(1:N), 다대다(N:M) 관계로 나뉩니다.
✅ 식별자(Identifier)는 각 인스턴스를 고유하게 구별하는 속성이며, 기본 키(PK), 보조 키, 외래 키(FK)로 구분됩니다.
✅ 식별자와 관계를 함께 활용하면 데이터베이스의 구조를 효율적으로 설계할 수 있습니다.
다음 포스팅에서는 Chapter2. 데이터 보델과 SQL을 다루겠습니다.
'자격증 > SQLD' 카테고리의 다른 글
[SQLD] 2-2: 트랜잭션(Transaction)/ 널(NULL) / (0) | 2025.02.14 |
---|---|
[SQLD] 2-1: 정규화(Normalization)와 반정규화(Denormalization) (0) | 2025.02.13 |
[SQLD] 1-2: 엔티티(Entity), 속성(Attribute), 인스턴스(Instance) (0) | 2025.02.13 |
[SQLD] 1-1: 데이터 모델의 이해 (1) | 2025.02.13 |
[SQLD] SQLD 시험이란 (feat. 시험 내용, 2025 시험 일정) (1) | 2025.02.13 |