Мне нужно создать таблицу для хранения удаленных данных. Данные, которые я получаю через веб-службу, имеют ключ-кандидат, сочетание двух столбцов, но я видел несколько сообщений, в которых они препятствуют использованию составного ключа в спящем режиме, вместо этого рекомендуя использовать суррогатный ключ. Если я создаю таблицу с помощью составного ключа, то я могу напрямую обновлять данные, но если я использую суррогатный ключ, то перед обновлением я должен сначала перенести первичный ключ. Мой вопрос заключается в том, какой из них следует использовать, составной ключ или ключ-суррогат? неСпящий составной ключ или ключ-суррогат
ответ
Скажи нет составного ключ ... еще потому
- Они неэффективны (зависит от базы данных)
- громоздких использовать
- больше числа параметров, а не только один
- склонен к ошибки
- Может привести к дублированию данных, если у нас имеется более одного столбца в виде составного ключа
Следовательно, предлагается суррогатный ключ. Хотя у него есть свои недостатки
- проблема производительность
- Ошибка склонные
- Дублирование
Как указана в Java Persistence с Hibernate ссылки:
Более опытные пользователи Hibernate используйте исключительно saveOrUpdate(); это намного проще позволить Hibernate решить, что нового и что старое, особенно в более сложной сети объектов со смешанным состоянием. только (не очень серьезный) недостаток эксклюзивного saveOrUpdate() - , который иногда не может догадаться, является ли экземпляр старым или новым без запуска SELECT в базе данных, например, когда класс , сопоставленный с естественный составной ключ и отсутствие версии или метки времени .
Некоторые проявления ограничения можно найти here.
Так что используйте естественные ключи, когда это необходимо для этого, и используйте суррогатные ключи, когда их лучше использовать.
Мне нужно обновить более миллиона записей, если я использую суррогатный ключ, тогда я должен сделать выбор и обновить для всех записей. Есть ли способ улучшить производительность? – wolverine
Обновление миллиона записей звучит так, как будто вы можете сделать это без спящего режима. –