Nodejs 27_테이블 관계 이해

‍박태우·2023년 11월 6일
0

1. 테이블관계 이해하기

관계의 3종류 : 1:1/ 1:N/ N:N

(사용자가 댓글을 다는 경우 사용자 1, 댓글 N)
(게시글에 공동 작성자가 있는 경우 다대다)

  • 시퀄라이즈에서의 관계

  • User

(유저가 1 : 댓글이 여러개 => 시퀄라이즈에서는 hasMany로 표현한다.)
(위의 코드에서 User 입장에서의 foreignKey 가 'commenter'가 된다.
Comment 테이블의 commeter가 내 id 값을 참조하고 있다는 의미이다.

sourcekey = 자신 // foreignKey = 남)

  • Comment

(belongsTo 를 이용하여 Comment가 User 테이블의 id를 target으로 잡고 있다고 할 수 있다. foreignKey 로 사용되는 것은 commenter라고 지시하고 있다.

foreignKey 속성 (commenter)는 belongsTo가 있는 속성에 column이 추가 된다.)


(자주 사용되는 테이블과 그렇지 않은 테이블 또는 보안을 위한 테이블로 여러 테이블을 만드는 경우에 1:1 을 많이 쓴다.

1:1 이어서 누가 hasOne, belongsTo를 가질지는 우리가 정해야한다.
belongsTo 에 foreignKey 가 들어가므로 이걸 누구에게 줄 것인지에 대해 처리해야한다.

위의 경우 Info에 foreignKey 가 생긴다.)


(다대다 관계가 생각보다 많다.

게시글이 여러 해시태그 가짐 // 하나의 해시태그를 여러 게시글이 가짐

다대다 관계가 되면 중간 테이블이 하나 생긴다.

위 1:1 의 User, comment의 경우 다른 테이블과 다대다 관계를 맺으려면 대표적으로 User가 다른 테이블과 맺는다. 둘다 연결하면 복잡함)

(중간 테이블이 없으면 안되는 이유 아래 설명)

(위와 같이 중간 테이블을 설정하지 않고 새로운 칼럼을 각 테이블에 만들어서 관리하면 어떻냐는 생각도 할 수 있다.

db 정규화 위반이다. 한 컬럼에는 한 가지의 데이터만 들어있어야 한다.
위의 경우 hashs와 posts에 1,2로 두개의 데이터가 들어있는데 이게 정규화 원칙 위반이다. 이를 해결하기위해

중간 테이블을 만들어서 연결해주는 방법이 존재하는 것이다.)

(시퀄라이즈에서는 중간테이블의 이름을 through 로 정해준다.

다대다 관계에서는 둘다 belongsToMany를 이용하여 연결한다.
ManyToMany 관계에서는 순서를 뒤집어도 같은 관계이기 때문에 같은 belongsToMany를 이용한다. (대칭) , 주도권이 존재하지 않는다. )

profile
잘 부탁드립니다.

0개의 댓글