在我的数据库模式中,我有一个已识别的实体。标识符可以重复使用,因此与实体存在一对多的关系。示例:一个人可以有一个昵称。昵称不是唯一的,可以在许多人之间共享。所以架构可能看起来像:
PERSON
id
name
nickname_id
NICKNAME
id
name
问题是插入一个新人时,我必须先查询NICKNAME
昵称是否存在。如果没有,那么我必须在NICKNAME
. 插入多人时,这可能会很慢,因为每个人插入都会导致查询NICKNAME
。
我可以通过首先查询所有昵称的昵称来优化大型插入。JPA 查询语言:
SELECT n FROM NICKNAME n WHERE name in ('Krusty', 'Doppy', 'Flash', etc)
然后根据需要创建新昵称,然后在人员上设置nickname_id。
这使软件有点复杂,因为它必须将昵称临时存储在内存中。此外,一些数据库对IN
子句的参数有限制(SQL Server 是 2100 左右),所以我执行了多个查询。
我很好奇其他人是如何处理这个问题的。更具体地说,当一个数据库被规范化并且一个实体与另一个实体有关系时,插入一个新实体基本上会导致必须检查另一个实体。对于大型插入,这可能会很慢,除非将操作提升到代码域中。有没有办法自动插入相关的表行?
仅供参考,我正在使用 Hibernate 的 JPA 实现