2009-08-01 5 views
1

(HABTM 또는 많은 것에서 많은 것)이 "많은 것을 가지고 있고"많은 원리의 작품에 어떻게 속하는지 설명 할 수 있습니까? 내가 users 테이블과 books 테이블을 가지고 있고 ID가있는 테이블 users_books이 있다고 해봅시다. 실제로이 원칙을 사용할 필요가 있으며 어떻게 작동합니까?HABTM 원리가 어떻게 작동하는지 설명 할 수 있습니까?

+1

약어의 설명 –

+0

많은 것을 소유하고 있으며, –

답변

3

왜 다맥적 관계 (HABTM)가 필요한지 묻고 있습니까?

위에서 언급 한 경우 사용자가 많은 책을 소유하고있을 수 있습니다. 데이터베이스에서이를 어떻게 표현할 수 있습니까? 사용자 테이블에 두 개의 테이블, 책 및 사용자가 있다고 가정하면 책 당 하나의 열을 추가 할 수 없습니다. 소유 한 도서 수의 상한선을 모를 때 사용자가 소유 할 수있는 각 책. 'books'라는 열을 추가하고이 열에 도서 ('XML'또는 '쉼표'로 구분)를 '저장할'수는 있지만 데이터베이스 질의를 많이 만듭니다 (예 : 사용자가 소유 한 개별 서적 식별).

books 테이블에 대해서도 마찬가지입니다. 특정 도서를 몇 명의 사용자가 소유하고 있습니까? 다시 한 번 정면을 알 수 없으므로 books 테이블에 여러 개의 '사용자'열을 추가 할 수없고 사용자 모음이있는 '사용자'열을 하나만 추가하면 도움이되지 않습니다.

이 문제에 대한 해결책은 userid와 bookid의 두 열을 포함하는 'join'테이블을 추가하는 것입니다. 이 표는 사용자를 책에 연결합니다. 내가 좋아 보일 수 테이블을 조인이 식별자 1 사용자 2 및 ID 101, 102 세 책과 103 그래서 만약 :

users_books가 HABTM에 오면 이것은
 
userid bookid 
1  101 
2  101 
2  103 

- 그것은 사이에 테이블을 조인의 사용자 및 도서.

+0

한 명의 사용자가 여러 권의 책을 소지 할 수 있습니까? 어떻게 보이거나 일할 것인가? – openfractal

+0

조인 테이블을 통해. 나는 내 대답을 설명했지만 formatting은 엉망이되었다. 사용자 1은 join 테이블에 두 권의 책 % 2C을 가지고 있다고 가정하자. 첫 번째 행은 userid = 1이고 bookid = 101이고 두 번째 행 userid = 1은 bookid = 102이다. 사용자 2의 경우 userid = 2, bookid = 101, userid = 2, bookid = 103의 행이 있습니다. 따라서 사용자 1은 ids 101과 102가 포함 된 2 권의 책을 가지고 사용자 2는 ids 101과 103이 포함 된 2 권의 책을 갖게됩니다. –

+0

앞서 서식을 수정했습니다. –

2

H B A ND 같은 elongs 모든 데이터베이스 테이블 사이의 여러 관계에 많은 처리 MO를 T. 귀하의 경우에는 한 명의 사용자가 많은 책을 보유 할 수 있고 한 권의 책은 많은 사용자를 보유 할 수 있으므로 사용자와 책의 관계를 처리 할 수 ​​있습니다.

has_and_belongs_to_many :

alt text

이 블로그 게시물 개념의 꽤 좋은 설명과 그림처럼 보이는 HABTM를 레일에 레일 협회 가이드의
http://sumanthtechsavvy.blogspot.com/2008/03/hasandbelongstomany-habtm-in-rails.html

+0

에 속합니다. 나는 이해. 나는 그 점을 보지 못했다. 왜 그것을 하나의 테이블에 통합하고 응용 프로그램의 관점에서 어떻게 작동합니까? – openfractal

+5

이것은 실제로 관계형 데이터베이스에서 비교적 일반적인 패턴입니다. 루비 군중은 특별한 이름을지었습니다. 그러나 이것은 항상 당신이 다 - 대 - 다 관계를 다루는 방법입니다. 두 테이블을 연결하려면 항상 "연결 테이블"이 필요합니다. –

+0

응용 프로그램 의미에서 작동하는 방식 : 학교 등록을 생각하십시오. 각 학생/클래스 조합에 대한 연결 테이블에 하나의 레코드가 필요합니다.다이어그램에 대해 –

0

This section 몇 가지가 있습니다 이것이 레일에서 작동하는 방식에 관한 좋은 정보. 또한 협회 자체에 대한 추가 정보를 저장해야 할 경우 through association의 가능성을 고려해야합니다. Wikipedia는 many-to-many 데이터 모델의 기본 개념에 대해서도 brief article을 가지고 있습니다.

관련 문제