У каждого участника есть 0 или более заказов.Каждый заказ содержит как минимум 1 товар.memberid - varchar, а не integer - это нормально (пожалуйста, не упоминайте, что это не очень хорошо, я не могу это изменить).Итак, thera 3 таблицы: члены, заказы и элементы order_items.Заказы и элементы order_items ниже:
CREATE TABLE `orders` (
`orderid` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`memberid` VARCHAR( 20 ),
`Time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
`info` VARCHAR( 3200 ) NULL ,
PRIMARY KEY (orderid) ,
FOREIGN KEY (memberid) REFERENCES members(memberid)
) ENGINE = InnoDB;
CREATE TABLE `order_items` (
`orderid` INT(11) UNSIGNED NOT NULL,
`item_number_in_cart` tinyint(1) NOT NULL , --- 5 items in cart= 5 rows
`price` DECIMAL (6,2) NOT NULL,
FOREIGN KEY (orderid) REFERENCES orders(orderid)
) ENGINE = InnoDB;
Итак, таблица order_items выглядит следующим образом:
orderid - item_number_in_cart - цена:
...
1000456 - 1 - 24,99
1000456 - 2 - 39,99
1000456 - 3 - 4,99
1000456 - 4 - 17,97
1000457- 1 - 20,00
1000458 - 1 - 99,99
1000459 - 1 - 2,99
1000459 - 2 - 69,99
1000460 - 1 - 4,99
...
Как видите, таблица order_items не имеет первичных ключей (и я думаю, что нет смысла создавать идентификатор auto_increment для этой таблицы, потому что, как только мы захотимдля извлечения данных мы всегда извлекаем их как WHERE orderid='1000456' order by item_number_in_card asc
- весь блок, идентификатор не будет полезен в запросах).После того, как данные вставлены в order_items, они не ОБНОВЛЯЮТСЯ, а просто ВЫБРАНЫ.
Вопросы:
- Я думаю, что было бы неплохо поместить индекс в item_number_in_cart.Кто-нибудь может подтвердить это?
- Есть ли что-то еще, что я должен сделать с order_items, чтобы увеличить производительность, или это выглядит довольно хорошо?Я мог что-то пропустить, потому что я новичок.
Заранее спасибо.