情况:
我们项目的负责人决定使用高度规范化的数据库作为我们的数据库设计。这意味着大表的每个字段实际上都是一个 ID 而不是实际值。他的意图是没有任何类型的重复,即使在重复不会伤害的地方(人们的名字,那种东西)。
但这确实会导致一个问题:插入新数据时,我们需要检查每个子表以查看该值是否存在(第一次查询),如果不存在则插入它(第二次查询),否则检索 ID,执行这实际上是主表中的每一列(所以 30 次左右),然后我们可以创建我们真正想要获得的对象。(创建一个对象大约需要 60 次数据库命中!)。
我们在spring工作,所以我们使用jdbcTemplate来实际建立数据库连接,每次查询都是昂贵的。当我们插入或更新数以千计的新记录时,这实际上会严重减慢数据库的速度。
这整个过程让我觉得很脏很不对,所以我想问:有没有更好的方法?如果子查询不存在,是否可以插入一个值,如果存在则不插入,并在这两种情况下返回实际键,该键立即用于在主表中设置 ID?有没有一种优雅的解决方案来减少查询数量而不引入太多复杂的 SQL(为了团队成员)?