본문 바로가기
한국경제 with toss

7/10 - 데이터베이스 모델링

by devmin67 2024. 7. 11.

데이터베이스 모델링에서 관계(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 테이블의 외래 키입니다.

CREATE TABLE Departments (
    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)

출처: https://gitmind.com/kr/erd-examples.html

 

엔티티(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)
);

// 데이터 모델링의 핵심은 구동하는 시스템의 부하 없이 테이블을 적재적소에 배치해 모델간의 관계에 효율을 이끌어내는 것.

 

 

'한국경제 with toss' 카테고리의 다른 글

개발환경 설정(추가본)  (0) 2024.07.12
7/ 11 - SQL 실습(타이타닉 데이터 활용)  (0) 2024.07.11
7/9 - SQL  (0) 2024.07.09
7/8 - streamlit  (0) 2024.07.08
7/4 - 맷플롯립 기본 요소  (0) 2024.07.04