관련(다대다)!!

뭐가 연관이야??


간단하게 설명하자면 모형을 사용하는 책상 사이의 연관성이다.
책상 사이를 한 모형에서 다른 모형으로 미리 연결하다
방문할 수 있도록 말이죠.
● 이번에는'다대다'와 관련된 설명이다.

연관된 이유


Rails에서 연관은 두 개의
액티브 레코드 모델 간 연락을 말하는 거죠.
두 모델 간에 연관이 필요합니다.
그 이유를 아십니까?
그것은 바로 관련을 통해 코드의 통용적인 조작을 실현하는 것이다
간단하니까.

예: 연관(여러 쌍)


이번에는 users 테이블과 rooms 테이블로 설명하고 싶습니다.
우선 책상마다 다른 책상과의 관계를 고려해야 한다.
· 사용자가 어느 채팅방에 속하는지 관리
· 채팅방에 존재하는 사용자 관리
이번 사진은 아래와 같다.

여기서 주의해야 할 것은users표와rooms표의 관계이다
이번 DB 디자인에는'다대다'의 관계성이 존재한다.
'다대다'는 서로 여러 개의 관련 표를 가진 id의 관계를 가리킨다.
이번 상황은 "한 사용자가 여러 채팅방에 속한다".
이것은'한 채팅방에 여러 사용자가 있다'는 상황의 관계다.
단, 이 표의 관계성을 나타내기 위해 외부 키에 여러 개의 값을 입력합니다
저장할 수 있다면 매우 간단하지만, 한 열에 여러 개의 값을 저장할 수 없습니다.
좋은 방법으로 연관된 id가 증가할 때마다 열을 추가하는 것이다
패턴이 있다.
예를 들어 여러분들이 쉽게 이해할 수 있도록 그림을 올려주세요.

그림을 보면 열을 불안하게 느낄 수 있다
쓸모없는 열이 생겼다.
연관된 레코드가 늘어날수록 더 많은 열이 생성되기 때문에 이러한 DB 설계
디자인이 안 좋네.
이것을 해결하기 위해 사용하는 것은 중간 탁자다.

가운데 탁자


그럼 가운데 탁자가 무엇으로 여겨질지 간단하게 설명해 드릴게요.
가운데 테이블은 말 그대로 두 테이블 사이에 있는 테이블이다.
이번에는 users 테이블과 rooms 테이블 사이에 중간 테이블을 만듭니다.
중간 테이블은 다중 쌍 관계의 두 테이블 사이에 끼어 있으며 두 개의 조합 모드만 기록으로 저장됩니다.
또한 두 모델만 다대다 연관을 실현할 수 있다
조립할 수 없습니다.
따라서 중간 표를 이용하여'다대다'의 관계를 정의한다.

이렇게 설명만 한다면 좋지 않은 인상을 줄 수 있다
다음은 SNS의 예를 들어 설명한다.
아래의 설명부터 표 이름을 변경하기 때문에 아까의 표 이름과 다르다.이해하기 어려우면 미안해요.

라벨이 달린 사진 투고 애플리케이션을 예로 들면 중간 테이블의 역할을 확인해 보세요.


인스타그램 등 한 장의 사진에 여러 개의 해시태그를 붙일 수 있는 사진 투고 애플리케이션을 상상해 보세요.
인스타그램처럼 태그 기능이 구현되는 테이블은 3개입니다.
필요태그 테이블, 사진 저장할 테이블,
그 다음은'어떤 사진에 어떤 라벨이 등록되어 있습니까?'라는 표를 저장한다.
그중에 사진과 라벨을 저장한 표의 이름은 tags표, 포토스표로 하면 된다."어떤 사진에 어떤 라벨이~"책상은 포토스입니다.테이블 주세요.두 관계 테이블을 밑줄로 연결하는 이름입니다.
각 테이블에 저장된 레코드의 관계는 다음과 같습니다.

위 이미지를 보면 중간 테이블에'어떤 사진과 라벨이 연관돼 있는지'정보가 기록돼 있다.한 음반에'포토 id'라고 쓰여있어요.× tag_id의 조합을 기록합니다. 모든 사진과 탭의 조합 수량을 기록합니다.예를 들어 사진 10장에 각각 3개의 다른 라벨이 있다면 이러한 관계성을 나타내기 위해 중간 표에 30개의 기록이 생성된다.
지금까지는 DB에 정보를 저장하기 위해 중간 테이블을 사용한 설명입니다.다음은 중간 표를 사용하여 설정 관련 방법을 확인합니다.
중간 탁자를 거쳐'다대다'의 탁자 위에 관련을 맺으려면 지금까지 사용했던has를 사용하십시오many 방법에서through 옵션을 기술해야 합니다.
다음은through 옵션을 설명해 드리겠습니다.

through 옵션


has_many 방법의 through 옵션은 모델의 다중 관계를 정의하는 데 사용됩니다.
through라는 이름처럼'경과~'라는 뜻이다.
나는 더욱 쉽게 참고 이미지를 올릴 것이다.

through 옵션을 사용하여 여러 쌍의 연관성을 정의할 때 각 모델에 다음과 같은 설명이 있습니다.
models/photo.rb
class Photo < ApplicationRecord
  has_many :photos_tags
  has_many :tags, through: :photos_tags
end
models/tag.rb
class Tag < ApplicationRecord
  has_many :photos_tags
  has_many :photos, through: :photos_tags
end
models/photos_tag.rb
class PhotosTag < ApplicationRecord
  belongs_to :photo
  belongs_to :tag
end
다대다관계의 두 표 모델에서has-는many 방법에서'1대 다'의 관련 정의를 결합하다
through 옵션을 통해 중간 표를 지정합니다.
한편, 중간 표의 모형에서belongsto 방법으로 다대다 관계의 두 표를 지정합니다.
이상은'다대다'와 관련된 방법을 정의하는 것이다.

총결산


•'다대다'연관 시 중간표 사용
• 다대다 관계의 두 표의 모형에서has방법
에 정의된 일대다 연관
through 옵션을 사용하여 경유의 중간 표를 지정합니다
이번 설명이 길어지고 이해가 안 된다면
미안합니다.
제가 열심히 정리했기 때문에 참고가 된다면 기쁘겠습니다.

이상.

좋은 웹페이지 즐겨찾기