Я пытаюсь создать веб-сайт, такой как гроу, который представляет собой платформу для продажи купонов на некоторые товары в магазинах.
customer или user можно купить vouchers и выкупать в автономном магазине (или у продавцов) на основе купленного ими vouchers.
Я запутался в логике или структуре базы данных при погашении ваучера. Что хочу спросить:
Как сгенерировать уникальный код для каждого купон / ваучер, купленного users. Каждый ваучер, размещенный на веб-сайте, имеет первичный ключ. Если 10 покупатель купил тот же ваучер, как избежать дублирования при его погашении. Если я добавлю уникальный код, я должен добавить в таблицу vouchers, или я сгенерирую ее после проверки users.
Должен ли я составить таблицу для выкупа и детализации выкупа. И как подать знак, если этот ваучер был использован.
Пожалуйста, дайте мне совет. Спасибо.

Я думаю, вам следует изучить многие ко многим отношениям между таблицами / моделями users и vouchers. Это в основном означает, что многие users могут иметь много vouchers и наоборот.
Тогда таблица может иметь другие поля, такие как redeemed (которое может быть полем dateTime) и notes / details. Наличие redeemed в качестве поля dateTime означает, что вы можете установить точное время, когда user погасил этот ваучер.
Это можно использовать, чтобы user не погашал ваучер несколько раз.
Первая проблема
Вы можете использовать идентификатор ваучера и, например, идентификатор пользователя. Итак, если у нас есть 2 пользователя и 1 ваучер, то эти уникальные коды будут такими: 1-1, 1-2.
Если они будут выглядеть как 1-1 и 1-2, то при простом разнесении по метке - у вас будет массив из двух элементов, где первый будет идентификатором ваучера, а второй - идентификатором пользователя. Вы можете хранить его в таблице ваучеров ...
Но лучше будет, если вы будете использовать отношения "многие ко многим". Вы создаете таблицы Users, Vouchers и UserVouchers и соединяете функции между ними. У пользователя может быть несколько ваучеров userVoucher, но у userVoucher только один ваучер. Посмотри на мой пикап db: http://www.laravelsd.com/share/8O0xtZ. Это называется опорной точкой, и вы создаете ее, когда подключаете пользователя с помощью ваучера.
Вторая проблема
Из связи UserVoucher вы узнаете, сколько раз использовался этот ваучер. У вас должен быть только столбец в таблице Vouchers, например max_users, и если вы напишете там, например, 4, вам нужно предотвратить создание нового взаимодействия, если у вас есть 4 строки в UserVoucher или во внешнем интерфейсе, вы можете проверить это и не показывать кнопку покупки . Оба защищенных способа подойдут;)