티스토리 뷰

M:N Relation

=> 그 대상을 어떻게 바라보는지가 중요

Like(좋아요, 찜) 테이블 

: 어떤 사용자가 어떤 상품을 좋아요 했는지에 대한 정보를 가지고 있는 테이블

 

User - Like - Item 관계

- User: 사용자의 찜 목록에는 어떤 아이템들이 있는지

- Item: 이 아이템을 좋아요한 사용자는 어떤 사용자들이 있는지

=> 서로 많이 갖고 있는 경우(has many) => M:N (사용처가 명확)

 

-> user와 Item에 외래 키 가지고 있음

가운데 Join테이블(Like)을 두고 양쪽에 외래 키를 받아와서

1:N이 연쇄된 형태를 통해서 N:N을 표현

 

예외

Order, Option, LineItem도 어떻게 보면 M:N구조라고 볼 수 있으나, 그렇게 쓰지 않음

이런식으로 1:N 관계가 이어져도 필요에 따라 표현하는 것이 달라짐

 

but, 좋아요는 사용처가 명확 -> 특정 사용자가 좋아요한 아이템들, 어떤 아이템을 좋아요한 사용자들

 


 

Like model 만들기

 

rails g model Like user:references item:references

마이그레이션 파일 생성 -> 특정 사용자가 특정 상품을 좋아요함 

 

null: false 옵션 그대로 남기기

User - Item (destroy 관계)

=> 특정 사용자가 삭제 됐을 경우 좋아요도 삭제되어야 함

(특정 아이템이 삭제됐을 때 좋아요도 필요 없음)

 

rails db:migrate

마이그레이션 파일 내용을 db에 적용

 

 

 

댓글