2016-07-21 2 views
0

대규모 멀티 테이블 백업 사이트를 처음으로 구축하기 위해 준비 중이며 루비 커뮤니티가이를 구축하는 방법에 대한 올바른 방향을 제시 할 수 있기를 바랍니다.멀티 테이블 검색 필터

앱 정보 : 저는 여러 테이블 (> 200k + 행 및 각 테이블 당 30 열)이 있습니다. 각 테이블 사이의 열은 일치하지 않으므로 길게 확장하고 한 테이블로 병합하려고하면 전체 열이 제어 불능 상태가됩니다. 그래서 하나의 마스터 테이블을 만드는 것은 내 마음 속의 가능성이 아닙니다. 모든 테이블의 행 (관측치)은 unique_id를 통해 연결됩니다. 내가하고자하는 일과이 커뮤니티에서 조언을 얻으려는 곳에서 다양한 테이블에서 끌어낼 수있는 여러 검색 조건을 만드는 방법이 있습니다.

여기 제가 달성하고자하는 것을 축소 한 예입니다. 이 예제에서 우리는 table_1과 table_2를 가지고 있습니다 (두 테이블 샘플 모두 아래에 있습니다). 및 대상 : : 그리고의 이름에 대한 사용자 검색을 가정 해 봅시다 영어는 팀의 영어 성적을보기 위해 : 78

나는 하나 개의 테이블로 작업 아무 문제가 없었다했지만, 여러 함께 일한 적이 없다 테이블은 하나의 공통 식별자를 통해 연결됩니다. 다시 말하지만, 이것은 축소 된 버전이라는 것을 기억하십시오. 실제 테이블은 모두 매우 커서 테이블이 너무 커지면 하나의 테이블을 만들 수 없습니다.

필터가 A : 선택된 변수를 보유하고 B : 사용자가 다른 테이블을 검색 할 수 있다는 것을 어떻게 보증할까요? 나는 여기서 나 자신을 분명히하고 싶다. 올바른 방향으로 나를 가리키는 조언이나 조언을 미리 보내 주셔서 감사합니다.

TABLE_1   

Unique_ID Name Age  Sex 
    1  Tim  16  Male 
    2  Chris 15  Male 
    3  Brad 18  Male 
    4  Mary 20  Female 


TABLE_2 

Unique_ID Subject  Grade 
    1  Math   88 
    1  English  78 
    1  History  98 
    2  Math   65 
    2  English  72 
    2  History  84 
+0

데이터베이스에 대해 이야기하지만 예제는 데이터베이스의 여러 테이블과 비슷합니다. 데이터베이스 나 테이블을 의미합니까? 보기가 문제의 가능성이 있습니까? – knut

+0

네, 테이블이 옳습니다. 나는 그 변화를 반영하기 위해 질문을 편집했다. – richiepop2

+0

질문에, 당신은 Ruby on Rails에 처음 온 경험이 있습니까? 또는이 응용 프로그램 용으로 작성된 모델과 마이그레이션이 이미 있습니까? 그렇다면 질문과 관련된 모델을 게시 할 수 있습니까? 아니면 그러한 모델과 관련 범위를 작성하는 데 도움을 찾고 계십니까? – rdnewman

답변

0

큰 테이블을 생성하기 위해보기를 정의 할 수 있습니다.

예제 코드 (내 예에 속편과 SQLite는 사용하지만 AR의 의지가 유사한 기능을 제공합니다.) :

#Prepare example 
require 'sequel' 
DB = Sequel.sqlite() 
Sequel.extension :pretty_table 

DB.create_table(:tab1){ 
    Fixnum :Unique_ID 
    String :Name  
    Fixnum :Age  
    String :Sex 
} 
DB[:tab1].insert(1, 'Tim', 16, 'Male') 
DB[:tab1].insert(2, 'Chris', 15, 'Male') 
DB[:tab1].insert(3, 'Brad', 18, 'Male') 
DB[:tab1].insert(4, 'Mary', 20, 'Female') 

DB.create_table(:tab2){ 
    Fixnum :Unique_ID 
    String :Subject 
    Fixnum :Grade 
} 

DB[:tab2].insert(1, 'Math', 88) 
DB[:tab2].insert(1, 'English', 78) 
DB[:tab2].insert(1, 'History', 98) 
DB[:tab2].insert(2, 'Math', 65) 
DB[:tab2].insert(2, 'English', 72) 
DB[:tab2].insert(2, 'History', 84) 


#Show how you could use a view to select on two tables 
Sequel::PrettyTable.print(
    DB[:tab1].inner_join(:tab2, :Unique_ID => :Unique_ID).filter(:Name => 'Tim', :Subject => 'Math') 
) 

결과 :

+---+-----+----+----+-------+---------+ 
|Age|Grade|Name|Sex |Subject|Unique_ID| 
+---+-----+----+----+-------+---------+ 
| 16| 88|Tim |Male|Math |  1| 
+---+-----+----+----+-------+---------+ 

하나의 문제는 테이블의 큰 숫자입니다. 따라서 모든 데이터가 포함 된 하나의 큰보기를 만들거나 많은보기를 만들지 않는 것이 좋습니다. 선택에 필요한 데이터로 결합을 정의 할 수 있습니다.