#php #mysql
#php #mysql
Вопрос:
Мне нужно, чтобы моя таблица допускала только уникальные значения в двух столбцах — составной ключ.
Было бы эффективнее сделать это на уровне базы данных, или мне не следует создавать составной ключ и позволить моему приложению проверять, существует ли запись для двух уникальных значений, которые будут отправлены, и если да, не создавать строку?
Комментарии:
1. Если я вас правильно понял, вы ищете составной ключ . Смотрите эту ссылку
2. Проверки данных принадлежат базе данных, а не приложению или пользователю, обращающемуся к базе данных. База данных не является приложением приложения, но может использоваться несколькими различными приложениями или пользователями. Таким образом, чтобы предотвратить необходимость повторной проверки снова и снова или, что еще хуже, забыть, что некоторые из них принадлежат центральному месту хранения данных.
3. Проверьте это на уровне базы данных — это обязательно. И вы можете дополнительно проверить на уровне клиента — если хотите…
Ответ №1:
Составные УНИКАЛЬНЫЕ или ПЕРВИЧНЫЕ ключи практически не создают дополнительной нагрузки на серверы баз данных, помимо той, которую создают типы данных ключей. (Например, такие типы данных, как длинные строки с сортировкой без учета регистра, требуют относительно дорогих уникальных ключей. BIGINTs дешевы.)
И, если вы используете составные уникальные ключи, ваша СУБД будет служить опорой для вашего кода приложения. Если есть дубликат, вы, вероятно, не хотите сообщать своим пользователям «Исключение: 1062 дубликата». Вам было бы лучше сказать «эта комбинация уже принята».
В СУБД действуйте. Вам нужна поддержка этого набора функций как в уникальном ключе вашей таблицы, так и в вашем приложении, чтобы сделать это правильно.