【发布时间】:2018-11-26 23:27:29
【问题描述】:
我有 2 个 Java 实体 - 学生和课程。 它们之间的关系是ManyToMany——每个学生有很多课程,每门课程可以被很多学生选修。
因为有很多重复的套课,所以我们决定做一个套课表,每次有学生想上一套课程,他都需要看看是否已经有这样的套课,如果有,他会使用它的 id,如果没有,他会创建这个集合。如果学生完成了这个集合,我们将在 setId 字段中设置null。
问题是课程表是动态的——我们可以随时添加和删除课程(除非有学生使用该课程),并且课程数量没有限制——甚至可以是 150 .
我们需要尽可能快地搜索集合的存在。
我们考虑过:
HashCode 但这个 HashCode 需要是动态的,它应该支持 2^100 种可能性。
将课程的 ID 连接为字符串并搜索该字符串以查看该集合是否存在。
为每门课程分配一个素数,集合的 id 将乘以素数 - 最大的数字(所有课程的集合)可能太大,分解的数字可能需要很长时间。
什么是满足这些要求的最佳实施方式?欢迎任何想法!
(我们不想使用传统的ManyToMany表的原因是性能问题。有一个很大的计算导致了这个。)
谢谢!
【问题讨论】:
-
什么是哈希码?
-
设置了什么?,是表变量还是内存变量?如果是表格,那么如何将其设置为 null...?
-
@POrekhov HashCode 是一个函数,它为每个集合提供一个唯一编号 - 即,如果你给这个函数课程编号 1、7、15,它会给你一个唯一编号 X,它不会给你任何其他集合
-
@SunilKanjar 一组是多门课程,例如一组课程可以是课程编号 [1, 15, 19, 24, 33] - 如果 2 名学生使用同一组课程,我希望他们具有相同的 set-id
-
@J.Doe 你确定你的哈希码函数是唯一的吗?
标签: java mysql database-design hash