구디사는 개발자 박성재님 강의
Supabase
테이블 관계 설정
TodoBoard를 만드는 프로젝트를 진행했는데 todo 데이터를 저장하기 위한 DB 테이블 설정이 필요했습니다.
각 테이블의 구조
pages 테이블:
- id: 페이지의 고유 ID
- start_date, end_date: 페이지의 시작 및 종료 날짜
- title: 페이지 제목
boards 테이블:
- id: 보드의 고유 ID
- page_id: 해당 보드가 속한 페이지의 ID (Foreign Key로 pages.id 참조)
- start_date, end_date: 보드의 시작 및 종료 날짜
- is_checked: 보드의 완료 여부
- content: 보드의 콘텐츠 정보
board_content 테이블:
- id: 콘텐츠의 고유 ID
- board_id: 해당 콘텐츠가 속한 보드의 ID (Foreign Key로 boards.id 참조)
- title: 콘텐츠 제목
- content: 콘텐츠 본문(주로 JSON 형식으로 저장)
- is_checked: 콘텐츠의 완료 여부
외래키 제약 조건 설정
pages, boards, board_content 테이블 사이의 관계에서 중요한 부분은 외래키 제약 조건입니다. pages 테이블과 boards 테이블, boards 테이블과 board_content 테이블은 부모-자식 관계에 있으며, 자식 데이터가 부모 데이터에 의존하고 있습니다.
ON DELETE CASCADE 설정
ON DELETE CASCADE는 부모 데이터가 삭제될 때, 부모 데이터를 참조하는 자식 데이터도 자동으로 삭제되도록 하는 외래키 옵션입니다.
데이터 삭제 시 자동 삭제 처리
페이지를 삭제할 때 해당 페이지에 속한 보드와, 그 보드에 속한 콘텐츠도 모두 삭제되도록 설정할 수 있습니다. 이를 통해 페이지를 삭제하면 해당 페이지에 포함된 보드와 그 보드에 포함된 콘텐츠도 자동으로 삭제되도록 할 수 있습니다.
-- 페이지 삭제 시 연관된 boards와 board_content도 자동 삭제됨
DELETE FROM pages WHERE id = 1;
boards 삭제 시 연관된 board_content 삭제
마찬가지로 boards 테이블에서 데이터가 삭제되면 해당 보드에 연결된 모든 콘텐츠(board_content)도 자동으로 삭제되도록 설정해야합니다. ON DELETE CASCADE가 설정된 외래키 제약 조건 덕분에 보드가 삭제될 때 그 보드에 관련된 콘텐츠도 함께 삭제됩니다.
-- boards 삭제 시 연관된 board_content 데이터도 자동 삭제
DELETE FROM boards WHERE id = 1;
위 쿼리에서는 boards 테이블에서 id = 1인 보드가 삭제되며, 이 보드에 속한 모든 콘텐츠(board_content)도 삭제됩니다.
회고
이번주 수업에서 좋았던 점 (Liked)
최근 각광받는 Supabase 를 사용해볼 수 있어서 좋았다
이번주에 새롭게 배운 점은? (Learned)
Supabase
배운 것에 관해서 내가 부족했던 부분은? (Lacked)
Supabase 를 사용해볼 생각은 못했다
앞으로 뭘 더 하면 좋을까? (Longed for)
앞으로도 꾸준히 개발을 해야한다
늦은만큼 더 성실히
본 후기는 본 후기는 [유데미x스나이퍼팩토리] 프론트엔드 프로젝트 캠프 과정(B-log) 리뷰로 작성 되었습니다.
댓글