내 첫 모델링 과제는 스타벅스 메뉴(그것도 음료만)를 모델링 해보는 것이었다.
동기 두 명과 함께 아래의 테이블 세 개 짜리 모델링에 반나절을 불태웠는데, 그마저도 보완해야할 사항이 무척 많았다.

이후로도 1차 프로젝트, 2차 프로젝트, 기업협업, 사이드프로젝트 등 모델링을 해볼 기회가 꽤 있었다.
그런데 항상 시간에 쫒겨 모델링이 도대체 무엇인지, 어떤 원칙으로 해야하는지 이론적으로 정리해볼 기회가 없었다.
열심히 삽질하고 멘토님, 동기, 현업 담당자 분들의 피드백을 받으면서 나름의 원칙을 체득하는 수 밖에 없었다.

그래서 이 기회에 데이터베이스의 설계에 대해 간략하게나마 정리해보려 한다.

데이터베이스의 설계

데이터베이스 설계란?

  • 데이터베이스의 스키마 내에 테이블, 인덱스, 뷰 등의 데이터베이스 객체를 정의하는 것.
  • 주된 내용은 테이블의 이름이나 열, 자료형을 결정하는 것.
  • 테이블 간의 관계를 생각하며 여러 테이블을 정의 하고 작성하는 것.

Name(물리명) VS Logical Name(논리명)

Name(물리명)

  • CREATE TABLE에 지정하는 테이블 이름이나 열 이름.
  • 길이 제한이 있거나 공백문자를 사용할 수 없는 등의 제약이 따름.
  • 알파벳을 사용해 이름을 지정.

Logical Name(논리명)

  • 설계상의 이름 (한글도 ok)
  • 물리명 만으로는 의미가 전달되지 않는 경우도 많이 논리명이 필요.
  • 실제로 부를 때 사용하는 이름

자료형

무엇이든 저장할 수 있는 자료형은 없기 때문에, 테이블 열에는 자료형을 지정해야 한다.
프로젝트를 진행하며 자주 사용했던 자료형과 그 용도는 아래와 같다.

  • INT : ID 혹은 갯수와 같이 정수로 딱 떨어지는 숫자를 저장할 때 사용한다.
  • VARCHAR(45) : max length를 정해야하며 길지 않은 문자열을 저장할 때 사용한다. MySQL의 경우 max length를 초과하는 경우 에러가 발생하거나 데이터가 정해진 길이만큼만 저장된다.
  • TEXT : 긴 문자열을 저장할 때 사용한다.
  • DATETIME : 생성일자, 수정 일자와 같이 날짜와 시간을 함께 저장할 때 사용한다.
  • DECIMAL(18,0) : 소수점 n째 자리까지 표기할 때 주로 사용한다. 가격도 할인율을 고려하여 int보다는 decimal로 저장하는 경우가 많다.
  • TINYINT : Boolean 필드일 경우 자료형을 Tinyint로 지정해준 경우가 많았다.

ERD(Entity Relationship Diagram) Tool?

주로 Aquerytool을 이용해 ERD를 작성했었다.
그러나, 테이블 수가 많고 관계가 복잡한 경우 Draw.io를 이용하면 좀더 깔끔하게 작성할 수 있다고 한다.

참고 :
Wecode 교육과정
아사이 아츠시, SQL 첫걸음

일단, 끝.😇

profile
new blog✨ https://kay-log.tistory.com/

0개의 댓글