7/10 - 데이터베이스 모델링
데이터베이스 모델링에서 관계(Relationship)는 데이터 엔터티(Entity) 간의 연결을 나타내는 중요한 요소입니다. 관계는 여러 유형으로 분류되며, 각 유형은 데이터가 어떻게 서로 연결되어 있는지를 설명합니다. 아래에 관계의 주요 유형들과 각 유형에 대한 예시를 자세히 설명하겠습니다.
1. 1:1 관계 (One-to-One Relationship)
하나의 엔터티가 다른 하나의 엔터티와 일대일로 연결되는 경우입니다.
예시:
- 사원(Employees)와 사원 상세 정보(EmployeeDetails):
- 각 사원은 고유한 상세 정보 레코드를 가지고 있습니다.
- Employees 테이블: EmployeeID, Name, Position
- EmployeeDetails 테이블: DetailID, EmployeeID, Address, PhoneNumber
- 관계: EmployeeID는 EmployeeDetails 테이블의 외래 키입니다
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
Name VARCHAR(100),
Position VARCHAR(100)
);
CREATE TABLE EmployeeDetails (
DetailID INT PRIMARY KEY,
EmployeeID INT UNIQUE,
Address VARCHAR(255),
PhoneNumber VARCHAR(20),
FOREIGN KEY (EmployeeID) REFERENCES Employees(EmployeeID)
);
2. 1관계 (One-to-Many Relationship)
하나의 엔터티가 여러 개의 다른 엔터티와 연결될 수 있는 경우입니다.
예시:
- 부서(Departments)와 사원(Employees):
- 하나의 부서는 여러 사원을 가질 수 있습니다.
- Departments 테이블: DepartmentID, DepartmentName
- Employees 테이블: EmployeeID, Name, DepartmentID
- 관계: DepartmentID는 Employees 테이블의 외래 키입니다.
DepartmentID INT PRIMARY KEY,
DepartmentName VARCHAR(100)
);
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
Name VARCHAR(100),
DepartmentID INT,
FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)
);
3. N관계 (Many-to-Many Relationship)
여러 개의 엔터티가 여러 개의 다른 엔터티와 연결될 수 있는 경우입니다. 이러한 관계는 일반적으로 중간 테이블(Join Table)을 통해 구현됩니다.
예시:
- 학생(Students)와 수업(Courses):
- 하나의 학생은 여러 수업을 들을 수 있고, 하나의 수업은 여러 학생이 들을 수 있습니다.
- Students 테이블: StudentID, StudentName
- Courses 테이블: CourseID, CourseName
- Enrollments 테이블 (중간 테이블): EnrollmentID, StudentID, CourseID
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
StudentName VARCHAR(100)
);
CREATE TABLE Courses (
CourseID INT PRIMARY KEY,
CourseName VARCHAR(100)
);
CREATE TABLE Enrollments (
EnrollmentID INT PRIMARY KEY,
StudentID INT,
CourseID INT,
FOREIGN KEY (StudentID) REFERENCES Students(StudentID),
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
);
4. 자기 참조 관계 (Self-Referencing Relationship)
한 테이블의 행이 같은 테이블의 다른 행과 관계를 가지는 경우입니다.
예시:
- 사원(Employees)와 상사(Manager):
- 각 사원은 상사를 가질 수 있으며, 상사는 역시 사원입니다.
- Employees 테이블: EmployeeID, Name, ManagerID
- 관계: ManagerID는 Employees 테이블 내의 다른 EmployeeID를 참조합니다
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
Name VARCHAR(100),
ManagerID INT,
FOREIGN KEY (ManagerID) REFERENCES Employees(EmployeeID)
);
요약
- 1:1 관계: 한 엔터티가 다른 하나의 엔터티와 연결됨 (예: 사원과 사원 상세 정보).
- 1관계: 한 엔터티가 여러 개의 다른 엔터티와 연결됨 (예: 부서와 사원).
- N관계: 여러 엔터티가 여러 개의 다른 엔터티와 연결됨, 중간 테이블을 통해 구현 (예: 학생과 수업).
- 자기 참조 관계: 한 테이블의 행이 같은 테이블의 다른 행과 관계를 가짐 (예: 사원과 상사).
이러한 관계들을 통해 데이터베이스를 모델링하면, 데이터의 구조와 연결을 명확히 하고, 효율적인 데이터 관리를 할 수 있습니다.
-ERD 보는 법
-ERD : Entitiy Relationship Diagram (Entitiy 개체들의 관계(Relationship)을 표현한 도표(Diagram)
엔티티(Entity)는 데이터베이스에서 저장되는 실체를 나타내며, 여러 가지 유형으로 분류될 수 있습니다. 그 중에서 유형 엔티티, 무형 엔티티, 코드 엔티티로 나눠 설명할 수 있습니다. 각 유형은 데이터의 성격과 사용 목적에 따라 다릅니다.
1. 유형 엔티티 (Tangible Entity)
유형 엔티티는 물리적으로 존재하는 실체를 나타냅니다. 이러한 엔티티는 실제로 존재하며, 관찰 가능하고 측정할 수 있습니다.
예시:
- 제품(Product): 실제로 존재하는 물품이나 상품을 나타냅니다.
- 속성: ProductID, ProductName, Price, Quantity
CREATE TABLE Product (
ProductID INT PRIMARY KEY,
ProductName VARCHAR(100),
Price DECIMAL(10, 2),
Quantity INT
);
직원(Employee): 회사에서 일하는 사람을 나타냅니다.
- 속성: EmployeeID, Name, Position, HireDate
CREATE TABLE Employee (
EmployeeID INT PRIMARY KEY,
Name VARCHAR(100),
Position VARCHAR(100),
HireDate DATE
);
2. 무형 엔티티 (Intangible Entity)
무형 엔티티는 물리적으로 존재하지 않지만, 데이터베이스에서 관리해야 할 중요한 정보를 나타냅니다. 이는 개념적이거나 추상적인 실체입니다.
예시:
- 계약(Contract): 두 당사자 간의 약정을 나타냅니다.
- 속성: ContractID, EmployeeID, ClientID, StartDate, EndDate, Terms
CREATE TABLE Contract (
ContractID INT PRIMARY KEY,
EmployeeID INT,
ClientID INT,
StartDate DATE,
EndDate DATE,
Terms TEXT,
FOREIGN KEY (EmployeeID) REFERENCES Employee(EmployeeID),
FOREIGN KEY (ClientID) REFERENCES Client(ClientID)
);
프로젝트(Project): 특정 목표를 달성하기 위해 수행되는 작업 집합을 나타냅니다.
- 속성: ProjectID, ProjectName, StartDate, EndDate, Budget
CREATE TABLE Project (
ProjectID INT PRIMARY KEY,
ProjectName VARCHAR(100),
StartDate DATE,
EndDate DATE,
Budget DECIMAL(10, 2)
);
3. 코드 엔티티 (Code Entity)
코드 엔티티는 주로 데이터베이스의 참조 무결성을 유지하고 데이터의 일관성을 보장하기 위해 사용됩니다. 이는 특정 범주의 값들을 정의하고, 다른 엔티티에서 이를 참조하도록 합니다.(분류체계나 코드집합을 나타내기도 합니다.)
예시:
- 제품 카테고리(ProductCategory): 제품의 범주를 정의합니다.
- 속성: CategoryID, CategoryName
CREATE TABLE ProductCategory (
CategoryID INT PRIMARY KEY,
CategoryName VARCHAR(100)
);
직원 직위(EmployeePosition): 직원의 직위를 정의합니다.
- 속성: PositionID, PositionName
CREATE TABLE EmployeePosition (
PositionID INT PRIMARY KEY,
PositionName VARCHAR(100)
);
// 데이터 모델링의 핵심은 구동하는 시스템의 부하 없이 테이블을 적재적소에 배치해 모델간의 관계에 효율을 이끌어내는 것.