-1

我正在使用Mockaroo和 Excel 创建和编辑一些 CSV 文件,这些文件将作为测试数据插入 MySQL 数据库。我有一个以student_takes_modulemodule_IDstudent_ID.

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

有没有办法可以配对随机student_IDmodule_ID值以符合这个规范?

4

2 回答 2

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 行,然后是您需要的所有行需要多长时间。

于 2014-04-27T00:05:53.413 回答
0

另一种解决方案可能是使用RANDBETWEENExcel 中的函数来随机选择值module_ID以填充student_IDs旁边的新列

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

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

于 2014-04-27T18:25:06.037 回答