目前我通过ActiveRecord
. 我会提前知道表名,然后创建表rails generate model modelname column1:string ...
。
但是现在,我得到了这个要求,即表名是未知的,以及将有多少个表。
例如: 在 directoryProjects
中,有许多子目录,例如 : 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等等。所以在每个版本中我都会做多轮负载测试来保证产品的质量。
所以项目、版本和负载测试报告之间的关系很简单:项目包含许多版本。每个版本都包含许多在不同日期执行的负载测试报告。
loadtest 报告中的信息如下:
交易名称 | 最短时间 | 平均响应时间 | 最大时间
交易_01 | 1.0s | 2.0s | 3.0s
交易_02 | 0.5s | 1.5s | 4.0s
...
为了将报告信息存储在数据库中,我创建了一个名为transactions_table
. 表是这样的:
报告名称 | 交易名称 | 分钟 | 平均 | 最大限度
20121001_100users_4hours | 交易_01 | 1.0 | 2.0 | 3.0
20121001_100users_4hours | 交易_02 | 1.0 | 2.0 | 3.0
...
20121002_100users_2 小时 | 交易_01 | 1.5 | 2.1 | 2.5
20121002_100users_2 小时 | 交易_02 | 1.1 | 2.1 | 2.7
...
...
然后我想获取所涉及的版本信息。所以我创建了另一个名为reports_table
. 表是这样的:
版本 | 报告名称
项目_a_1.0 | 20121001_100users_4hours
项目_a_1.0 | 20121002_100users_2hours
...
项目_a_2.0 | 20121101_50users_1hours
项目_a_2.0 | 20121102_50users_2hours
...
...
当然,我公司的项目不止一个。会有Project_B
,Project_C
和D
... 所以版本表又出现了,由项目名称及其版本组成。
这是我第一次设计数据库表的关系。所以我不知道我组织表格的方式是否正确。
首先,我只是觉得我可以把所有的交易数据——不管它属于哪个项目或版本——放在transactions_table
. 然后我意识到来自不同项目或版本的报告名称可能相同。然后它不能分开transactions_table
使用select * from transactions_table where report_name = "xxxx"
。并且transactions_table
's 的大小将比其他两个表增长得更快。
所以这就是为什么我正在考虑将不同项目中的报告存储到不同的表中。