В моей схеме базы данных у меня есть идентифицированный объект. Идентификатор можно использовать повторно, и, таким образом, с сущностью существует отношение «один ко многим». Пример: У человека может быть прозвище. Псевдонимы не уникальны и могут использоваться многими людьми. Таким образом, схема может выглядеть так:
PERSON
id
name
nickname_id
NICKNAME
id
name
Проблема в том, что при вставке нового человека я должен сначала запросить NICKNAME
, чтобы узнать, существует ли псевдоним. Если это не так, мне нужно создать строку в NICKNAME
. При вставке многих людей это может быть медленным, так как вставка каждого человека приводит к запросу к NICKNAME
.
Я мог бы оптимизировать большие вставки, сначала запросив Nickname для всех псевдонимов. Язык запросов JPA:
SELECT n FROM NICKNAME n WHERE name in ('Krusty', 'Doppy', 'Flash', etc)
А затем создайте новые псевдонимы по мере необходимости, а затем установите для людей псевдонимы.
Это немного усложняет программу, так как она должна временно хранить никнеймы в памяти. Кроме того, некоторые базы данных имеют ограничение на параметры предложения IN
(SQL Server 2100 или около того), поэтому я выполняю несколько запросов.
Мне интересно, как этот вопрос решается другими. В частности, когда база данных нормализована и объект имеет связь с другим объектом, вставка нового объекта в основном приводит к необходимости проверки другого объекта. Для больших вставок это может быть медленным, если только операция не поднята в область кода. Есть ли способ автоматически вставлять связанные строки таблицы?
К вашему сведению, я использую реализацию JPA в Hibernate.