좋아요는 Liked 테이블에 등록한다. 좋아요도 댓글과 마찬가지로 게시글에 대한 좋아요가 처리되는 것이기 때문에 게시글이 없을 경우 좋아요 또한 존재할 수 없다. 그러므로 좋아요 레코드는 게시글의 정보를 항상 포함하여야 한다.
(이하 생략)
좋아요의 경우 Liked 테이블에 별도로 게시글 별 좋아요 수와 좋아요한 사용자 목록을 insert할 것이다. 특정 게시글이 좋아요가 1개라도 된다면 Liked 테이블에 해당 게시글에 대한 레코드가 삽입될 것이기 때문에 이후부터는 insert가 아닌 update가 이루어져야 한다. 좋아요를 해제하는 경우도 update를 사용할 것이다.
하지만 클라이언트에서 게시판의 글 목록을 보여줄 때는 쿼리가 한 번만 요청될 수 있도록 좋아요 갯수 정보를 불러오는 것은 Board 테이블에서 할 것이다. 따라서 Liked 테이블에 insert, update가 발생할 때 trigger로 Liked 테이블의 likeCnt를 Board 테이블의 likeCnt로 동기화 시켜줄 것이다. 이 때, 해당 게시글에 대한 좋아요 갯수가 저장되어야 하므로 Board 테이블에 있는 고유 번호인 idx와 Liked 테이블에 있는 parentIdx 필드가 일치하는 부분에 대해서만 likeCnt를 업데이트 해야 한다.
Liked → Triggers 마우스 우클릭, Create New Trigger
Liked 테이블에 게시글에 대한 좋아요 정보가 없다가 새로 insert된 경우
CREATE DEFINER=`cube`@`%` TRIGGER on_like_insert
AFTER INSERT
ON Liked FOR EACH ROW
BEGIN
UPDATE Board SET Board.likeCnt = NEW.likeCnt
WHERE idx = NEW.parentIdx ;
END
Liked 테이블에 게시글에 대한 좋아요 정보가 과거에 이미 있었던 경우
CREATE DEFINER=`cube`@`%` TRIGGER on_like_update
AFTER UPDATE
ON Liked FOR EACH ROW
BEGIN
UPDATE Board SET Board.likeCnt = NEW.likeCnt
WHERE idx = NEW.parentIdx ;
END
Ctrl + S
로 저장