使用已知值集生成大量测试数据?

时间:2014-04-26 23:06:30

标签: mysql excel test-data

我正在使用Mockaroo和Excel创建和编辑一些将作为测试数据插入MySQL数据库的CSV文件。我有一个名为student_takes_module的文件,其中包含module_ID列和student_ID

有10000个学生证和500个模块。系统规范要求每个模块注册1到400名学生(因此student_takes_module)。

我是否可以将随机student_IDmodule_ID值配对以符合此规范?

2 个答案:

答案 0 :(得分:1)

这是一种方法,即近似和计算上的痛苦。首先,为每个模块分配一些学生。然后它随机选择学生为该模块。

insert into student_takes_module(module_id, student_id)
    select m.module_id, s.student_id
    from (select m.*, 10 + rand() * 350 as numstudents
          from modules m
         ) m cross join
         students s cross join
         (select count(*) as totalstudents) const
    where rand() < m.numstudents/const.totalstudents;

350代替400是因为在此上下文中使用rand()是近似值。 10的使用是因为我认为如果你有至少10名学生,那么当你循环访问数据时,你可能会至少有一名学生参加该课程。

此方法将处理10,000 * 500 = 5,000,000行以生成测试数据。但是,计算并不是那么糟糕(rand()因性能不佳而声名远扬,但这是因为函数调用与order by rand()之间的混淆。您可以通过将limit放在最后来测试性能,以查看生成10行,然后是1000行,然后是10000,然后生成所需的所需行所需的时间。

答案 1 :(得分:0)

另一种解决方案可能是使用Excel中的RANDBETWEEN函数随机选择module_ID中的值以填充student_ID的新列

另外,Mockaroo会接受所有500个module_ID作为自定义列表,它可以分配给随机生成的student_ID。

这些方法的缺点是学生将在所有模块中均匀分布。