한국의 영화 별점, 평점 작성 및 추천 서비스를 제공하는 왓챠피디아를 클론코딩을 첫번째 프로젝트로 선정하였다.
Aquery Tool을 이용하여 일차적으로 데이터베이스 구성을 하였다.
(한 영화에 여러 장르, 국가 정보가 담겨있는 것을 볼 수 있다.)
첫 프로젝트를 진행하며 느끼게 된 점인데, 백엔드의 경우 처음 데이터간의 관계를 생각하여 모델링을 하는 것이 무엇보다 중요한 듯 하다.
모델링을 후딱 해치우고 코딩부터 하고싶은 마음이 강했는데, 초기 ERD를 세팅하고 추가/예외 사항을 고려하다보니 처음부터 다시 생각해야 하는 경우가 참 많았다.
위에는 1,2,3차로만 나뉘어있지만, 실제로 마지막 모델링까지 구현하기 위해서 대여섯번은 갈아엎은 듯 하다.
이제 실제로 뷰를 작성해보면서 우리가 설계한 모델링이 얼마나 효율적일지, 또는 비효율적일지 알아봐야 겠다.
on_delete
: ForeignKeyField
가 바라보는 값이 삭제될 때 해당 요소를 처리하는 방법을 지정
일반적으로 우리는 models.CASCADE
, 즉 ForeignKeyField
를 포함하는 모델 인스턴스(row)도 같이 삭제하는 방법을 썼는데, 실제로는 데이터간의 관계를 생각해서 SET_NULL
과 같은 방법을 써야할 때도 있다.
데이터를 다룰 때에는 정말 조심해야할 사항이 많은 것 같다.
Rating
테이블을 보자.
user_id
는 FK이며 User
테이블을 바라본다.
movie_id
도 FK이며 Movie
테이블을 바라본다.
user_id
FK의 경우, user
가 삭제되었을 때 rating
이 삭제되면 데이터 관리(평균 별점 관리 등)에 이상이 생길 수 있어 NULL
값을 줬다.movie_id
FK의 경우, movie
가 삭제되었을 때에는 rating
(해당 영화의 별점)도 사라지는 것이 맞다고 판단하여 CASCADE
를 준 것이다.