2012-11-01 70 views
0

目前我通過ActiveRecord與數據庫中的特定表進行交互。我會提前知道表名,我將通過rails generate model modelname column1:string ...創建表。在rails中動態創建數據庫表

但是現在,我得到這個要求,表名是未知的,以及將有多少表。

例如:在目錄Projects,有許多是子目錄如:Projects_AProject_BProject_C ...我需要爲每個項目創建單獨的表。但你不知道會有多少項目。我需要在代碼中動態創建這些表。如何在我的代碼中實現?我是否使用ActiveRecord來實現該方法或其他方法?

代碼,如:

list = maintain_a_dir_list() 

Dir.entries(dir).each { |e| 
    if e is not in list 
    create_a_table_after_e_name 
    end 
} 

在這裏,我將解釋爲什麼我要創建這樣的表:

目錄名稱和我上面提到的子文件夾名稱是不真實的。所以我們再一次講述這個故事。

我是一個負載測試儀。我爲我們公司的一個項目進行負載測試。假設該項目的名稱是Project_AProject_A有許多版本,如1.0,2.0等。因此,在每一個版本中,我都會進行多輪負載測試以確保產品質量。

因此,項目,verson和loadtest報告之間的關係很簡單:項目包含許多版本。每個版本都包含許多在不同日期執行的加載測試報告。

在負載測試報告中的信息是如下:

事務名稱|最短時間|平均響應時間|最大時間

transaction_01 | 1.0s | 2.0s | 3.0s

transaction_02 | 0.5s | 1.5s | 4.0s

...

要存儲在數據庫中的報告的信息,我創建了一個名爲transactions_table表。該表是這樣的:

report_name | transaction_name | min |平均| max

20121001_100users_4hours | transaction_01 | 1.0 | 2.0 | 3.0

20121001_100users_4hours | transaction_02 | 1.0 | 2.0 | 3.0

...

20121002_100users_2hours | transaction_01 | 1.5 | 2.1 | 2.5

20121002_100users_2hours | transaction_02 | 1.1 | 2.1 | 2.7

...

...

然後我想獲取涉及的版本信息。所以我創建了另一個名爲reports_table的表。該表是這樣的:

版本| report_name

project_a_1.0 | 20121001_100users_4hours

project_a_1.0 | 20121002_100users_2hours

...

project_a_2.0 | 20121101_50用戶1小時

project_a_2.0 | 20121102_50users_2hours

...

...

而且ofcourse有一個在我公司多個項目。將會有Project_B,Project_CD ...所以再次出現版本表由項目名稱及其版本組成。

這是我第一次設計數據庫表的關係。所以我不知道我組織表的方式是否正確。

首先,我簡單地認爲我可以在transactions_table中放置所有交易數據 - 不管它屬於哪個項目或版本。然後我意識到來自不同項目或版本的報告名稱可能是相同的。然後它不能使用select * from transactions_table where report_name = "xxxx"分開transactions_tabletransactions_table的規模將比其他兩個表增長得更快。

所以這就是爲什麼我正在考慮將報告存儲在不同的項目到不同的表。

+1

爲什麼你要創建這樣的表? – Amar

+0

有一張表,使用外鍵來區分個人的「項目」。 –

+0

嗨阿馬爾。每個項目中的數據將越來越大。所以我只是覺得我應該爲他們製作獨立的桌子。這似乎不是一個好主意? – mCY

回答

0

可以更好地使用項目表中的folder_name字段嗎?

+0

你的意思是我最好將所有的項目數據存儲在一張表中,並使用項目名稱來區分它們?我擔心的是每個項目的數據會越來越大。這種結構會影響未來的表現嗎?我是DB的新手...... – mCY

+0

我問過我的一位有使用數據庫經驗的朋友;他告訴我我不需要擔心性能,因爲我的項目非常小,像Mysql這樣的數據庫可以輕鬆處理數百萬個記錄級別的數據。由於報告名稱與其他項目相同,他告訴我可以將項目名稱,版本和報告名稱都存儲在數據庫中。考慮到項目很小,這將花費一點空間,可以做到這一點。 – mCY

相關問題