現在、を介してデータベース内の特定のテーブルとやり取りしていますActiveRecord
。テーブル名は事前に知っておき、でテーブルを作成しますrails generate model modelname column1:string ...
。
しかし、今では、テーブル名とテーブルの数が不明であるというこの要件があります。
例:ディレクトリには、 : 、、 ...Projects
などの多くのサブディレクトリがあります。これらのプロジェクトごとに個別のテーブルを作成する必要があります。しかし、プロジェクトがいくつあるかはわかりません。そして、コードでこれらのテーブルを動的に作成する必要があります。私のコードでそれを達成する方法は?ActiveRecordを使用してそれまたは他のメソッドを実現しますか?Projects_A
Project_B
Project_C
次のようなコード:
list = maintain_a_dir_list()
Dir.entries( dir ).each { |e|
if e is not in list
create_a_table_after_e_name
end
}
ここでは、そのようなテーブルを作成する理由を説明します。
上記のディレクトリ名とそのサブフォルダ名は非現実的です。それでは、この話をもう一度繰り返しましょう。
私は負荷テスターです。弊社のプロジェクトの1つで負荷テストを行っています。プロジェクトの名前がであるとしましょうProject_A
。Project_A
1.0、2.0などの多くのバージョンがあります。そのため、すべてのリリースで、製品の品質を確認するために何度も負荷テストを行います。
したがって、プロジェクト、バージョン、およびロードテストレポートの関係は単純です。プロジェクトには多くのバージョンが含まれています。また、各バージョンには、異なる日に実行された多くのロードテストレポートが含まれています。
loadtestレポートの情報は次のとおりです。
トランザクション名| 最小時間| 平均応答時間| 最大時間
transaction_01 | 1.0秒| 2.0秒| 3.0秒
transaction_02 | 0.5秒| 1.5秒| 4.0秒
..。
レポート情報をデータベースに保存するために、という名前のテーブルを作成しますtransactions_table
。テーブルは次のようになります:
report_name | transaction_name | 分| 平均| 最大
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_50users_1hours
project_a_2.0 | 20121102_50users_2hours
..。
..。
そしてもちろん、私の会社には複数のプロジェクトがあります。がありますProject_B
、Project_C
そしてD
...プロジェクト名とそのバージョンで構成されるバージョンテーブルが再び登場します。
DBテーブルの関係を設計するのは初めてです。ですから、テーブルを整理する方法が正しいかどうかはわかりません。
まず、プロジェクトやバージョンに関係なく、すべてのトランザクションデータをに入れることができると思いますtransactions_table
。次に、異なるプロジェクトまたはバージョンのレポート名が同じである可能性があることに気付きました。transactions_table
その後、を使用して分離することはできませんselect * from transactions_table where report_name = "xxxx"
。また、transactions_table
のサイズは他の2つのテーブルよりも急速に増加します。
そのため、さまざまなプロジェクトのレポートをさまざまなテーブルに保存することを検討しています。