슈퍼타입(Supertype)과 서브타입(Subtype)은 객체 지향 데이터베이스 모델링에서 중요한 개념으로, 상속 구조를 반영한 데이터 모델링을 할 때 주로 사용됩니다. 이를 통해 공통된 특성을 가진 엔터티를 그룹화하고, 세부적으로 다른 특성을 가진 엔터티를 별도로 정의할 수 있습니다.
### 슈퍼타입과 서브타입의 개념
- **슈퍼타입**: 공통적인 특성을 가지는 상위 개념을 정의합니다. 여러 서브타입이 공유하는 속성들이 여기에 속합니다.
- **서브타입**: 슈퍼타입에서 상속된 특성을 가지면서, 각기 다른 속성이나 관계를 가지는 하위 개념입니다.
이 개념은 현실 세계에서 여러 개체가 공통적으로 공유하는 특성과, 그 개체들 간의 차별화된 특성을 모델링할 때 유용합니다.
### 예시: 직원 데이터 모델링
#### 슈퍼타입: `Employee`
`Employee`는 공통된 속성을 가진 슈퍼타입으로, 모든 직원들이 공통적으로 가지는 정보를 담고 있습니다.
| EmployeeID | Name | HireDate | Salary |
|------------|--------|-----------|--------|
| 1 | Alice | 2022-01-10| 70000 |
| 2 | Bob | 2021-05-20| 75000 |
#### 서브타입: `FullTimeEmployee`, `PartTimeEmployee`
`FullTimeEmployee`와 `PartTimeEmployee`는 슈퍼타입인 `Employee`의 서브타입으로, 각각 풀타임 직원과 파트타임 직원을 구분하여 더 구체적인 속성을 정의할 수 있습니다.
1. **`FullTimeEmployee`** 는 `Employee`의 속성 외에 추가적인 속성으로 연차 휴가와 연금 플랜 정보를 가질 수 있습니다.
| EmployeeID | VacationDays | PensionPlan |
|------------|--------------|-------------|
| 1 | 20 | Yes |
| 2 | 15 | Yes |
2. **`PartTimeEmployee`** 는 `Employee`의 속성 외에 근무 시간당 시급 정보를 가질 수 있습니다.
| EmployeeID | HourlyWage |
|------------|------------|
| 3 | 20 |
| 4 | 18 |
#### 슈퍼타입과 서브타입 구조의 장점
- **데이터 재사용성**: 공통된 속성들을 슈퍼타입에 정의함으로써, 데이터를 중복 저장하지 않고 효율적으로 관리할 수 있습니다.
- **유연한 확장**: 새로운 유형의 서브타입이 필요할 때 슈퍼타입 구조를 확장하기만 하면 됩니다. 예를 들어, 인턴 직원의 특성을 가진 `InternEmployee` 서브타입을 추가할 수 있습니다.
#### 적용 방식
- **One to One Type**: 슈퍼타입과 서브타입을 별도의 테이블로 나누어 관리합니다. 예를 들어, `Employee`, `FullTimeEmployee`, `PartTimeEmployee`가 각각 별도의 테이블로 나누어져 있을 수 있습니다. 조인(join)이 발생할 수 있지만, 데이터 관리가 용이합니다.
- **Plus Type**: 슈퍼타입 테이블에 서브타입의 고유 속성을 추가하는 방식입니다. `Employee` 테이블에 모든 직원의 공통 속성뿐만 아니라 각 서브타입에 해당하는 속성도 추가로 저장할 수 있습니다.
- **Single Type**: 모든 데이터가 하나의 테이블에 저장됩니다. 이 방식은 단순하지만, 불필요한 속성들이 포함될 수 있어 데이터 관리가 복잡해질 수 있습니다.
### 요약
슈퍼타입과 서브타입은 데이터베이스 설계 시 상속 구조를 반영하여, 공통된 특성을 가진 데이터를 그룹화하고 개별적인 특성을 구분하는 데 사용됩니다. 예를 들어, 모든 직원이 공통적으로 가지는 속성은 슈퍼타입인 `Employee` 테이블에 저장되고, 풀타임과 파트타임 직원의 특수한 속성은 각각의 서브타입 테이블인 `FullTimeEmployee`, `PartTimeEmployee`에 저장될 수 있습니다.