2015-07-10 22 views
0

Мне нужно создать таблицу для хранения удаленных данных. Данные, которые я получаю через веб-службу, имеют ключ-кандидат, сочетание двух столбцов, но я видел несколько сообщений, в которых они препятствуют использованию составного ключа в спящем режиме, вместо этого рекомендуя использовать суррогатный ключ. Если я создаю таблицу с помощью составного ключа, то я могу напрямую обновлять данные, но если я использую суррогатный ключ, то перед обновлением я должен сначала перенести первичный ключ. Мой вопрос заключается в том, какой из них следует использовать, составной ключ или ключ-суррогат? неСпящий составной ключ или ключ-суррогат

ответ

1

Скажи нет составного ключ ... еще потому

  • Они неэффективны (зависит от базы данных)
  • громоздких использовать
  • больше числа параметров, а не только один
  • склонен к ошибки
  • Может привести к дублированию данных, если у нас имеется более одного столбца в виде составного ключа

Следовательно, предлагается суррогатный ключ. Хотя у него есть свои недостатки

  • проблема производительность
  • Ошибка склонные
  • Дублирование

Как указана в Java Persistence с Hibernate ссылки:

Более опытные пользователи Hibernate используйте исключительно saveOrUpdate(); это намного проще позволить Hibernate решить, что нового и что старое, особенно в более сложной сети объектов со смешанным состоянием. только (не очень серьезный) недостаток эксклюзивного saveOrUpdate() - , который иногда не может догадаться, является ли экземпляр старым или новым без запуска SELECT в базе данных, например, когда класс , сопоставленный с естественный составной ключ и отсутствие версии или метки времени .

Некоторые проявления ограничения можно найти here.

Так что используйте естественные ключи, когда это необходимо для этого, и используйте суррогатные ключи, когда их лучше использовать.

+0

Мне нужно обновить более миллиона записей, если я использую суррогатный ключ, тогда я должен сделать выбор и обновить для всех записей. Есть ли способ улучшить производительность? – wolverine

+0

Обновление миллиона записей звучит так, как будто вы можете сделать это без спящего режима. –