2016-07-21 236 views
0

我準備第一次構建一個大型多表支持的站點,並希望Ruby社區能夠幫助我指出如何去構建這個方向的正確方向。多表搜索過濾器

關於該應用程序:我有幾個大型表(每個表>> 200k +行和30列)。每個表格之間的列不匹配,如果嘗試擴展到更寬,併合併到一個表格中,則我的總列將會無法控制。所以創建一個主表不是我腦海中的可能性。所有表格的行(觀察)都通過unique_id連接。我想要做什麼以及我希望從這個社區得到一些建議的地方是我如何創建一個可以從各種表中獲得的多重搜索標準。

這是一個縮小的例子,我期待完成。在這個例子中,我們有table_1和table_2(兩個表格樣本如下)。而假設爲名稱的用戶搜索:和主題:英語,爲了看Tim的英語等級: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| 
+---+-----+----+----+-------+---------+ 

的一個問題是表的大數目。所以我不建議用所有數據創建一個大視圖,也不要創建很多視圖。 您可以使用您選擇所需的數據來定義連接。