Логика создания контрагента и одновременно заказа
Помогите, плиз, разобраться как правильно логику определить: Чтобы создать карточку заказа, нужно прикрепить к нему клиента (он может быть повторным или новым). У меня в голове только одно - сначала создаем клиента (или выбираем повторного из базы данных) и потом создаем заказ. Можно ли как то объединить эти два этапа?
Ответы (1 шт):
Без структуры БД это конечно гадание на кофейной гуще, но все же попробую. Предположим у Вас вот такая структура БД
-- справочник заказов
CREATE TABLE orders (
id bigint not null auto_increment,
name varchar(255)
...
);
-- справочник клиентов
CREATE TABLE clients (
id bigint not null auto_increment,
name varchar(255) not null,
jur_address varchar(255),
real_address varchar(255),
...
);
-- связка заказов с клиентами (один-ко-многим)
CREATE TABLE lnk_client_orders (
id bigint not null auto_increment,
client_id bigint int not null,
order_id bigint int not null,
...
);
Предположим создали Вы заказ. Теперь его нужно как-то связать с клиентом - но Вы его не знаете, до тех пор пока не создадите или не получите из БД. Все как Вы и описали. Тут выхода два:
- Традиционный - создаем заказ, запоминаем ИД, создаем/получаем клиента - запоминаем ИД. Связываем эти два ИД через таблицу связку.
- Пишем на стороне БД процедуру
create_orderв которую передаем данные о заказе и клиенте - и она уже внутри себя сама решает - что создать или получить и как связать.
CREATE PROCEDURE create_order
(
order_name varchar(255),
client_id bigint,
client_name varchar(255),
...
)
BEGIN
DECLARE order_id bigint;
INSERT INTO orders (name) VALUES(order_name);
SELECT INTO @order_id LAST_INSERT_ID();
-- если указан client_id получаем о нем информацию (проверяем что такая запись есть)
-- если он не указан - создаем нового клиента, получаем ID
-- по аналогии с order_id и связываем клиента и заказ путем
-- INSERT в таблицу-связку
END;
На мой взгляд предпочтительней второй вариант т.к он решает за Вас большую часть проблем с проверками - плюс его реализация скрыта под капотом, что не позволит в случае чур меня - взлома сайта - понять как и что у Вас формируется, и соответственно, что-то накрутить в заказах.