Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 유니티 오브젝트 풀링
- Mathf.Clamp
- Raycast
- 알고스팟
- InputManager
- 소스코드 줄번호
- 유니티 Rotate
- LFS
- 유니티 리소스매니저
- eulerAngles
- 유니티
- 이진트리
- 유니티 ResourceManager
- 유니티 Collision
- ML-Agents
- 너비 우선 탐색
- Quaternion.Euler
- 코드블럭 테마
- 오브젝트 풀링
- 유니티 InputManager
- 유니티 머신러닝
- LayerMask
- c++ 문자열 자르기
- LookRotation
- 유니티 시야 가림
- 깊이 우선 탐색
- unity
- c++
- 유니티 Vector3
- git-lfs
Archives
- Today
- Total
무민은귀여워
[Ruby on rails] 테이블 관리 1:1, 1:n, m:n 관계 본문
반응형
[Ruby on rails] 테이블 관리 1:1, 1:n, m:n 관계
레일즈에서는 Association(관련)을 사용하여 여러 테이블에 걸쳐 데이터 조작을 손쉽게 할 수 있다.
레일즈에서 Association 기능을 사용하려면 다음과 같은 이름 규칙을 지켜야 한다.
・ 외부 키는 "<참조 모델 이름>_id"의 형식(ex: book_id, user_id)
・ 중간 테이블은 참조되는 테이블들을 "_" 기호로 연결. 이때 연결 순서는 사전 순서(ex: authors_books)
중간 테이블이란 m:n 관계를 나타낼 때 서로의 Association을 관리하기 위한 테이블로, 결합 테이블이라고도 한다.
belongs_to Association
가장 간단하고 자주 사용하는 것.
books와 reviews 테이블을 예로 살펴보자. reviews 테이블이 book_id를 외부 키로 하여 books 테이블을 참조한다.
1 2 3 | class Review < ApplicationRecord belongs_to :book end | cs |
1 | <h2> [<%= @review.book.title %>] 의 리뷰 </h2> | cs |
1:n 관계 has_many Association
belongs_to 메서드는 참조 소스 테이블 -> 참조 대상 테이블이라는 단방향 관계이지만, has_many 는 양방향을 정의할 수 있다.
1 2 3 | class Book < ApplicationRecord has_many :reviews end | cs |
1 2 3 | <% @book.reviews.each do |review| %> <li><%= review.body %> (<%= review.updated_at %>)</li> <% end %> | cs |
1:1 관계 has_one Association
일대일 대응 관계
1 2 3 | class User < ApplicationRecord has_one :author end |
1 2 3 | class Author < ApplicationRecord belongs_to :user end | cs |
m:n 관계 has_and_belongs_to_many
중간 테이블을 이용해 다대다 관계를 표현.
books - authors_books[author_id(FK), book_id(FK)] - authors
1 2 3 | class Book < ApplicationRecord has_and_belongs_to_many :authors end |
1 2 3 | class Authors < ApplicationRecord has_and_belongs_to_many :books end | cs |
m:n 관계 has_many through Association
has_and_belongs_to_many는 간단하지만 단점이 있다. 중간 테이블에서 양쪽 모델의 키라는 굉장히 단순한 정보만을 가지고 있는 것. 예를 들어 books와 users 테이블이 reviews 테이블을 사이에 두고 m:n 관계에 있는 구성은 m:n관계로 나타내지 못한다. 이러한 경우에는 reviews 테이블도 모델로 접근할 필요가 있다.
1 2 3 4 | class Book < ApplicationRecord has_many :reviews has_many :users, through: :reviews end | cs |
1 2 3 4 | class Review < ApplicationRecord belongs_to :book belongs_to :user end | cs |
1 2 3 4 | class User < ApplicationRecord has_many :reviews has_many :books, through: :reviews end | cs |
반응형
'IT > 기타' 카테고리의 다른 글
0701 과제 (0) | 2019.07.01 |
---|---|
메모) php 코딩 규약 (0) | 2018.11.26 |
[Ruby on rails] 테스트 (0) | 2018.10.22 |
memo) yarn 관련 메모 (0) | 2018.10.13 |
memo) Module build failed: TypeError: Cannot read property 'eslint' of undefined (0) | 2018.10.08 |
Comments