Education/신한투자증권 프로 디지털 아카데미

관계형 데이터베이스가 처음이라면 ERD 부터 만들어봅시다 !

마이캣호두 2025. 8. 10. 12:22
반응형

 

 

 

드디어 리액트 프로젝트가 모두 끝나고 새로운 수업이 시작됐다 !!!

SQL 은 이해만 하고 있으면 잘 풀 수 있지 않을까 하고 쉽게 생각했었는데, 나중에 조인과 서브 쿼리한테 두들겨 맞았다^-^

오늘은 첫 날이라 간단한 ERD를 구성하는 수업으로 진행되었다.

 

 

 

1. 관계형 데이터 베이스와 모델링

2. 모델링

 

2) 모델링 주요 개념

  • 개체(엔터티, Entity): 데이터베이스에서 관리하려는 대상 → 테이블로 구현됨
    • 예: 고객(Customer), 제품(Product), 주문(Order)
  • 속성(Attribute): 엔터티의 세부정보  컬럼에 해당
    • 예: 고객 엔터티의 이름, 이메일, 연락처
  • 관계(Relationship): 엔터티 간의 연결  외래 키로 구현
    • 예: 고객이 주문을 한다(Customer - Order)
  • (Key): 데이터를 식별하거나 연결하기 위한 고유한 값
    • Primary Key: 테이블의 각 행을 고유하게 식별
    • Foreign Key: 다른 테이블과의 관계를 정의
  • 제약조건(Constraint): 데이터 무결성을 유지하기 위한 규칙
    • 예: UNIQUE, NOT NULL, CHECK

 

 

7) ERD 표기법

 

 

8) ERD 예시

 

Q. 어디를 개선하면 좋을까?

→ Client 가 Account 를 여러 개 가질 수 있는데 현재는 일대일 관계이므로 이 부분을 수정

 

 

ERD 를 쉽게 구현할 수 있도록 도와주는 다양한 툴이 있는데 나는 그 중에서 dbdiagram 을 사용했다.

https://dbdiagram.io/

 

dbdiagram.io - Database Relationship Diagrams Design Tool

 

dbdiagram.io

 

 

// 고객
Table Customer {
  cus_id integer [primary key]
  username varchar
  tel varchar
  email varchar
  cus_regist_date timestamp
  cus_registrant varchar
  cus_change_date timestamp
  cus_changer varchar
}

// 계좌
Table Account {
  acc_num integer [primary key]
  balance integer
  created_at timestamp
  acc_regist_date timestamp
  acc_registrant varchar
  acc_change_date timestamp
  acc_changer varchar
}

// 거래
Table Transaction {
  tr_id integer [primary key]
  tr_date varchar
  tr_amount integer
  tr_type varchar
  tr_regist_date timestamp
  tr_registrant varchar
  tr_change_date timestamp
  tr_changer varchar
}

// 상품
Table Product {
  pr_id integer [primary key]
  pr_name varchar
  pr_type varchar
  pr_rate integer
  min_subscription_amount integer
  pr_regist_date timestamp
  pr_registrant varchar
  pr_change_date timestamp
  pr_changer varchar
}

// 상담
Table Consulting {
  con_id integer [primary key]
  cus_id integer
  employee_number integer
  con_type varchar
  con_date timestamp
  con_context text
  con_regist_date timestamp
  con_registrant varchar
  con_change_date timestamp
  con_changer varchar
}

// Customer 1 : N Account
// Account 1 : N Transaction
// Customer 1 : N Consulting
// Product 1 : N Account

Ref: Account.acc_num > Customer.cus_id
Ref: Account.acc_num > Product.pr_id
Ref: Transaction.tr_id > Account.acc_num
Ref: Consulting.cus_id > Customer.cus_id

 

 

Table Student {
  student_id varchar [primary key]
  name varchar
}

Table Professor {
  professor_id varchar [primary key]
  professor_name varchar
}

Table Department {
  dept_id varchar
  dept_name varchar
}

Table LabUsage {
  usage_id integer [primary key]
  student_id varchar
  application_date date
  start_date date
  end_date date
  professor_id varchar
}

Table Borrower {
  borrower_id varchar [primary key]
  borrower_name varchar
  borrower_type varchar
}

Table Book {
  book_id varchar [primary key]
  book_name varchar
  publisher_name varchar
  published_date timestamp
  author_name varchar
  isbn varchar
}

Table Loan {
  loan_id integer [primary key]
  borrower_id varchar
  book_id varchar
  loan_date date
  return_date date
}


Ref: LabUsage.student_id > Student.student_id
Ref: LabUsage.professor_id > Professor.professor_id
Ref: Student.student_id < Department.dept_id

Ref: Loan.borrower_id > Borrower.borrower_id
Ref: Loan.book_id > Book.book_id

Ref: Student.student_id - Borrower.borrower_id
Ref: Professor.professor_id - Borrower.borrower_id

 

 

Table Student {
  student_id varchar [primary key]
  name varchar
}

Table Professor {
  professor_id varchar [primary key]
  professor_name varchar
}

Table Department {
  dept_id varchar
  dept_name varchar
}

Table LabUsage {
  usage_id integer [primary key]
  student_id varchar
  application_date date
  start_date date
  end_date date
  professor_id varchar
}

Table Borrower {
  borrower_id varchar [primary key]
  borrower_name varchar
  borrower_type varchar
}

Table Book {
  book_id varchar [primary key]
  book_name varchar
  publisher_name varchar
  published_date timestamp
  author_name varchar
  isbn varchar
}

Table Loan {
  loan_id integer [primary key]
  borrower_id varchar
  book_id varchar
  loan_date date
  return_date date
}


Ref: LabUsage.student_id > Student.student_id
Ref: LabUsage.professor_id > Professor.professor_id
Ref: Student.student_id < Department.dept_id

Ref: Loan.borrower_id > Borrower.borrower_id
Ref: Loan.book_id > Book.book_id

Ref: Student.student_id - Borrower.borrower_id
Ref: Professor.professor_id - Borrower.borrower_id

반응형