在我的數據庫模式中,我有一個標識的實體。該標識符可以重新使用,因此與實體存在一對多關係。例如:一個人可以有一個暱稱。暱稱不是唯一的,可以在很多人中共享。因此,該模式可能類似於:在與另一個表有關係的表中插入行
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實現的
SELECT n FROM中的'n'不正確;你可能是指身份證。 – 2008-12-08 20:29:04