У меня есть домашняя система ORM, которая в настоящее время поддерживает только автоинкрементные первичные ключи. Это сработало хорошо, но пришло время поддерживать составные первичные ключи. Я знаю о священной войне между суррогатом против составных первичных ключей, и я лично думаю, что есть место для каждого. Во всяком случае ...:)
С автоинкрементным первичным ключом легко определить, нужно ли выполнять оператор INSERT
или UPDATE
при сохранении модели: это зависит от того, установлен первичный ключ или нет.
Но с (не-автоинкрементными) составными первичными ключами трудно сказать, так как вам нужно установить все значения полей составного первичного ключа, даже если вы делаете INSERT
.
Итак, на мой вопрос: как определить, нужно ли выполнять оператор INSERT
или UPDATE
при работе с составным первичным ключом?
Вот решения, которые я придумала:
- Запрос заранее, существует ли запись с составным первичным ключом. Это кажется лучшим вариантом, хотя при каждом сохранении необходимо выполнять дополнительный запрос.
- Использовать синтаксис MySQL
INSERT ... ON DUPLICATE KEY UPDATE
. Но есть другие операции, которые выполняет мой класс Model, которые требуют знания, является ли запись новой или нет, например, проверять ли все столбцы (если запись новая) или только измененные столбцы (когда запись уже существует).
У вас есть лучшее решение? Или один из них мой лучший выбор? Спасибо за понимание!