Вот простое и немного еретическое предложение для корзины покупок.
table cart(
customer_id not null
,create_date not null
,primary key(customer_id)
,foreign key references customers(customer_id) on delete cascade
);
table cart_item(
customer_id not null
,product_id not null
,quantity not null
,modified_date not null
,primary key(customer_id, product_id)
,foreign key(customer_id) references cart(customer_id) on delete cascade
,foreign key(product_id) references products(product_id) on delete cascade
);
Вот логическое обоснование дизайна:
Если то, что вы строите, похоже на большинство торговых площадок, то в каждый момент времени будет только 0-1 активных тележек.за клиента.Поэтому корзина может наследовать ключ покупателя.
Обычно товар не покупают 2 раза.Вместо этого каждый покупает 2 единицы одного и того же продукта, поэтому я сделал ключ продукта частью первичного ключа в таблице «Корзина».
Либо клиент решает НЕ начинать работу с товарами в своей корзине.В этом случае корзина и товары будут оставаться в таблице до тех пор, пока он не вернется и не решит продолжить и заплатить, или пока вы не решите (например, на основании cart.create_date), что пришло время удалить данные..
Когда клиент переходит к оформлению заказа и завершает свой заказ, вы можете создать реальный заказ и строки заказа (продукты), включая дату заказа, которая не обязательно совпадает с датой, когда клиент начал прикреплять товары.в корзине.(Моя покупка книг на Amazon обычно длится неделю, потому что я продолжаю находить интересные книги, и мне сначала нужно прочитать несколько рецензий:)
Что касается того, какие ключи должна иметь ваша таблица заказов / строк, она на самом деле зависит отмного вещей, таких как:
- Можно ли удалить товары, у которых есть заказы?
- Нужно ли вам точно представлять информацию о продукте (цена, наименование) на момент покупки?
- Использую ли я таблицу заказа для представления других элементов, таких как скидки / коды кампании и т. Д.
- Нужно ли точно указывать адрес доставки клиента на момент покупки?(клиент переехал в другую страну, но вы отправили товары на его старое место)
В приведенном выше дизайне используются натуральные ключи, что в данном случае обеспечивает отличную производительность.