Если я создаю решение для электронной торговли из нескольких магазинов и хочу, чтобы в таблице заказов содержался последовательный идентификатор магазина, каков наилучший способ сделать это?
Например, представьте эти идентификаторы заказа в последовательности: -
UK0001
UK0002
UK0003
DE0001
UK0004
DE0002
и т.д..
через сгруппированный идентификатор PK MySQL / MyISAM
- MySQL будет управлять этим автоматически, если поле страны и
поле с автоматически увеличивающимся идентификатором
используемый. Но MyISAM имеет некоторые присущие
такие проблемы, как блокировка таблицы и
эта функция кажется, что это особенность
это доступно только в MyISAM, так
движущийся движок базы данных не будет
возможно с этим решением.
Программный. Допустим, у нас есть
два поля: order_id (глобальное авто
колонка inc PK, управляемая БД),
порядковый номер (для конкретной страны
поле последовательного идентификатора поддерживается
через код) и таблица также имеет
столбец shop_id для привязки заказов
в магазины.
Итак - после создания новой записи заказа, когда механизм БД назначил идентификатор новой записи, а вновь созданный идентификатор заказа был извлечен в коде как переменная $ newID
select order_number+1 as new_order_number from orders where order_id < $newID and shop_id = UK order by order_id desc limit 1
(это псевдокод / sql кстати)
Вопросы:
это реальное решение? Или есть более эффективный способ сделать это?
Если в таблице содержится более 1 миллиона записей, будут ли дополнительные затраты на запрос при отправке заказа вызывать проблемы или нет?
Похоже, что существует вероятность столкновения order_number, если два заказа размещены в одной стране и обрабатываются одновременно. Если это возможно? если так, есть ли способ защиты от этого? (возможно, уникальный индекс и транзакция?)
С нетерпением ждем вашей помощи!
Спасибо