[프로젝트 회고] 외주 프로젝트 회고2_정규화 작업!

신창호·2024년 4월 20일
0

프로젝트회고

목록 보기
8/8

서론

  • 고객의 요청뿐만 아니라 확장성을 고려해서 작업해보고자 한다.
  • 이번에 쿠폰 이벤트관련하여 관리자 페이지 로직을 구현하게 되었는데, 이번 이벤트뿐만아니라 추가적인 이벤트가 생길시에도 손쉽게 추가하여 사용할 수 있게 만들어드리고 싶었다.
    (원하는 이벤트도 쉽게 추가하기기능)

쿠폰과 독립적인 이벤트

  • 위 DB테이블은 주요내용을 생략하고, 쿠폰을 저장하는 테이블인데 이벤트는 크게 관련이 없기때문에, 이렇게 정규화가 가능해보였고
  • 이벤트 테이블을 별도로 관리함으로써, 추가하고 변경하는 로직을 만들기 쉬워보여서 작업에 들어갔다.




체크리스트

DB에서 필요한것은 무엇인가?

  • 새로운 Table생성하기(EVENT담을 테이블)
  • 운영하고 있는 db이기때문에, 기존 coupon 테이블에서 eventType의 고유값을 추출 새로운 eventTable에 넣어주기
  • coupon테이블의 기존 eventType칼럼 제거

관리자 페이지에서 필요한 기능이 무엇인가?

쿠폰 조회시

  • 쿠폰 조회시, 이벤트 선택칸을 DB에서 불러와 리스트업을 해줘야한다.
  • 쿠폰 조회시, 쿠폰 테이블뿐만아니라, 이벤트 테이블과 join하여 불러와야한다.

쿠폰 등록시

  • 이벤트 선택칸을 DB에서 불러와 리스트업을 해줘야한다.
  • 추가적으로 이벤트명을 추가할 수 있어야 한다.
    • 이때 이벤트명 중복 체크가 필요
  • 바뀐 관계로 쿠폰 등록하기

쿠폰 이벤트 수정

  • 이벤트 고유번호만 바꾸면되서, 사실상 큰 변화는 없다.

이벤트 명 수정 기능 추가

  • 이벤트 명 수정

이벤트 삭제 기능 추가

  • 쿠폰 삭제와 관계없는 이벤트 삭제 로직이 있어야한다.
    • 단, 삭제시 이벤트가 사용된 쿠폰이 있으면 안된다.





# 시행착오 > 먼저 DB부터 변경해주었다. > MySQL 버전: 체크 필요

DB

Event테이블 만들기

CREATE TABLE eventTypes (
    eventTypeID INT AUTO_INCREMENT PRIMARY KEY,
    eventType VARCHAR(255) NOT NULL
);

데이터 이전

  • 중복을 제거하여 조회하였다.

새로운 테이블에 이전하기

INSERT INTO eventTypes (eventType)
SELECT DISTINCT eventType
FROM coupon;

기존 테이블값 변경하기

  • 먼저 id값을 넣을 컬럼 생성!
ALTER TABLE coupon
ADD COLUMN eventTypeID INT;
  • set으로 마이그레이션
UPDATE coupon c
JOIN eventTypes et ON c.eventType = et.eventType
SET c.eventTypeID = et.eventTypeID;
  • 완료후 기존 컬럼 제거
ALTER TABLE coupon
DROP COLUMN eventType;


서버기능 구현

현재 관리자페이지 적용할 기능을 구현중에 있다.
그래서 다음 포스팅에서 큰 맥락에서만 작업을 공유할 계획이며,(내부함수등 디테일한 부분은 불가능하기에)
완료되는데로 요약하여 정리해보겠다.

profile
한단계씩 올라가는 개발자

0개의 댓글