目前我通過ActiveRecord
與數據庫中的特定表進行交互。我會提前知道表名,我將通過rails generate model modelname column1:string ...
創建表。在rails中動態創建數據庫表
但是現在,我得到這個要求,表名是未知的,以及將有多少表。
例如:在目錄Projects
,有許多是子目錄如:Projects_A
,Project_B
,Project_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_A
。 Project_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_C
和D
...所以再次出現版本表由項目名稱及其版本組成。
這是我第一次設計數據庫表的關係。所以我不知道我組織表的方式是否正確。
首先,我簡單地認爲我可以在transactions_table
中放置所有交易數據 - 不管它屬於哪個項目或版本。然後我意識到來自不同項目或版本的報告名稱可能是相同的。然後它不能使用select * from transactions_table where report_name = "xxxx"
分開transactions_table
。 transactions_table
的規模將比其他兩個表增長得更快。
所以這就是爲什麼我正在考慮將報告存儲在不同的項目到不同的表。
爲什麼你要創建這樣的表? – Amar
有一張表,使用外鍵來區分個人的「項目」。 –
嗨阿馬爾。每個項目中的數據將越來越大。所以我只是覺得我應該爲他們製作獨立的桌子。這似乎不是一個好主意? – mCY