我正在使用Mockaroo和Excel创建和编辑一些将作为测试数据插入MySQL数据库的CSV文件。我有一个名为student_takes_module
的文件,其中包含module_ID
列和student_ID
。
有10000个学生证和500个模块。系统规范要求每个模块注册1到400名学生(因此student_takes_module
)。
我是否可以将随机student_ID
和module_ID
值配对以符合此规范?
答案 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。
这些方法的缺点是学生将在所有模块中均匀分布。