Как избежать дублирования идентификаторов в php

У меня есть приложение на основе браузера php, которое предназначено для системы управления больницей. Ситуация такова, что есть 3 отдела, из которых осуществляются платежи, т.е. прием, лаборатория и аптека. Работник в каждом расположении выше отличается, как и их вклад. Каждый из этих отделов отправляет информацию о квитанции в одну таблицу, называемую квитанцией, и, следовательно, генерируется идентификатор, который является следующим идентификатором после последнего идентификатора таблицы. Данные отправляются обратно в тот же отдел на основе этого идентификатора (который был сгенерирован на основе последнего идентификатора из таблицы).

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

Есть ли решение для этого? Мне сказали, что триггеры это решат, но я не хочу идти туда и сохранять простоту. Я думал о генерации случайного удостоверения личности, но ребята из больницы хотят иметь постоянное удостоверение личности, как это будет указано в квитанции Также примите во внимание, что система не должна замедляться (значительно).

РЕДАКТИРОВАТЬ: Ой, кажется, здесь гораздо больше информации, следовательно, автоинкремент не работает. Есть 3 столбца для рассмотрения т.е. id(Pkey), чековый и дебитный. Теперь, если человек платит одновременно, то идентификатор и чеково будут увеличены на единицу, а дебитно будет пустым. Но если он собирается заплатить позже, тогда его чекно будет НЕДЕЙСТВИТЕЛЕН, в то время как его ID и дебитно увеличатся на единицу с последнего введенного ID. Следовательно, необязательно, чтобы квитанция (которая будет отправлена ​​обратно сотруднику отдела) была заполнена, и, следовательно, автоматическое увеличение не сработало бы тогда правильно? Еще раз спасибо, ребята, за ваши решения.

2 ответа

Решение

Используйте AUTO_INCREMENT (MySQL) поле для столбца идентификатора, поэтому база данных заботится о генерации уникального идентификатора. Другие системы баз данных имеют аналогичные поля, например serial тип поля в PostgreSQL.

Я прочитал обновление вашего вопроса, и вы действительно должны разбить эту базу данных. Просто я так понимаю - нужно создать новый заказ с уникальным идентификатором. Но заказ может быть оплачен не сразу, поэтому, когда заказ оплачен, ему также нужен уникальный номер чека. Вы можете сгенерировать случайное число для получения, сделать поле уникальным и обновлять поле в базе данных без ошибок. Это ужасно противно.

Вам лучше создать новую таблицу для платежей. Таким образом, в вашей таблице заказов будет храниться автоинкрементный код заказа (согласно ответу TheifMasters) и другие данные, такие как идентификатор пользователя, идентификатор клиента, дата, описание и т. Д. Затем у вас будет таблица платежей / транзакций, в которой будет храниться платежный идентификатор (автоматически инкремментированный) идентификатор заказа (который относится к таблице заказов), дата платежа, статус, сумма и т. д. и т. д.

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

Другие вопросы по тегам