每個成員有0個或更多的訂單。每個訂單至少包含1個項目。 memberid - varchar,不是整數 - 沒關係(請不要提及這不是很好,我不能改變它)。 所以,thera 3表:成員,訂單和order_items。訂單和ORDER_ITEMS低於:MySQL:無主鍵優化表(索引,外鍵)
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 ID,因爲一旦我們要提取數據,我們隨時提取作爲WHERE orderid='1000456' order by item_number_in_card asc
- 整個塊,身份證無助於查詢)。 一旦數據被插入到order_items中,它就不會被UPDATE,只是被選中。
的問題是:
- 我認爲這是把指數item_number_in_cart一個好主意。有人可以證實嗎?
- 還有什麼我必須做order_items來提高性能,或者看起來相當不錯?我可能會錯過一些東西,因爲我是一個新手。
在此先感謝您。
「order_items」沒有數量字段嗎,或者您是否忽略列來簡化示例? – outis
感謝您的問題。是的,我刪除了幾行。當選擇或插入價格時,選擇並插入它們,然後才選擇它們。 – Haradzieniec
你的意思是你刪除了幾列? – outis