-
hasMany와 belongsTo 차이점Today I Learned 2020. 1. 18. 13:59
문제
예제와 같이, 1:N 관계를 맺기 위해서 hasmany()와 belongsTo()를 이용했다. 그러나, 똑같은 외래키가 중복되서 생성되는 문제점이 발생했다. 일단, hasmany()를 제거하고 belongsTo() 만 사용해서 DB를 사용하였지만, 이 둘의 차이점을 조사해서 더 적절하게 사용해야할 필요성을 느꼈다.
이 둘의 차이점
상선에서 근무하는 선원들을 관리하는 데이터베이스를 관리한다고 가정해보자. 각 배에서는 선원들이 근무할 것이고, 배는 여러 선원들이 일할 수 있고 선원들은 한 배에서만 일할 수 있는 1:N 관계이다.이러한 관계를 다음과 같은 메소드로 정의할 수 있다.Member.belongsTo(Ship);이 메소드는 getShip() 메소드로 해당 선원이 어떤 배에서 근무하는지 확인할 수 있다.그리고 반대로 다음과 같은 메소드로 정의할 수도 있다.Ship.hasMany(Member);이 메소드는 이 배에 어떤 선원들이 근무하는지 getMembers() 메소드로 확인할 수 있다.위에 선으로 그은 부분도 맞는 부분이 있지만, get method로 정보를 얻어오는 것은 실패했다. 그래서 서적을 참고해보니 1 : N 관계에서 N을 갖는 쪽에서 hasMany로 정의하고, 1을 갖는 쪽에서 belongsTo로 정의하면 어느 테이블에서도 참조 테이블을 불러올 수 있었다.
해결
이전에는 스키마를 정의할 때, foreign key를 수동으로 정의했으나 위에 설명한 hasMany, belongTo를 이용해 정의하면 자동으로 외래키를 생성해 sequelize에서 제공하는 메소드들을 오류없이 사용할 수 있었다.
/models/board.js
참조당하는 테이블에 hasMany, sourcekey로 정의하고, 참조를 하는 테이블에 belongsTo, targetkey로 정의한다.
/routes/boards/index.js
다음과 같이 include 옵션을 이용해 자유롭게 사용할 수 있다.
출처
https://stackoverflow.com/questions/20290815/belongsto-vs-hasmany-in-sequelize-js
https://medium.com/@edtimmer/sequelize-associations-basics-bde90c0deeaa
'Today I Learned' 카테고리의 다른 글
form에서 put, delete를 지원하지 않는 이유 (0) 2020.01.18 sequelize include (0) 2020.01.18 react session 보관 문제 (1) 2020.01.15 CORS cross domain issue (0) 2020.01.15 React setState 비동기 문제 (0) 2020.01.15