將訂單資料寫入至MySQL資料庫(正規化)
後端PHP將收到的訂單資料寫入MySQL訂單資料表格
我們收到的這些資料,正確來說,不應該原封不動地放到資料表格裏,一個訂單系統的實體關係圖應該像下圖: 資料表格的E-R圖所要表達的核心精神是表格間的數量關係,例如,一筆訂單可以有多筆的產品/餐飲等項目,一會員可以有多筆訂單,一筆訂單只能有一個會員,因此,會員與訂單的關係就是一對多的關係。 一般來說,一筆訂單基本上含有幾個資訊:- 訂購者,數量1
- 訂購的項目,數量多筆
- 處理員工,數量1
- 顧客姓名、地址、電話
- 多筆的商品項目(商品名稱與價格等)
- 操作員/店員姓名
一對多的關係:
- 一個班級可以有多個學生
- 一個部門有多位員工
- 一個顧客可以有多筆信用卡資料
多對多的關係:
- 一筆訂單有多筆商品,而一個商品可以存在於多筆的訂單中。
- 一位作者可以出版多本書,一本書可以有多位作者
- 一位學生可以修多個課程,一個課程可以有多位學生
- 黑糖珍珠奶茶,數量:2,價格60,小計 120元
- 仙草凍奶茶,數量:3,價格 65,小計195元
- 抹茶珍珠奶茶,數量:2,價格 70,小計 140元
- 客戶資料表格(客戶與訂單的1對多關係,一個客戶可以有多筆訂單)(這部份我們關聯到WordPress的users資料表格,如月曆應用app那樣)
- 員工資料表格(員工與訂單的1對多關係,一個員工處理多筆訂單)(我們這個例子沒有員工,暫不處理)
- 訂單-商品項目資料表格(關聯到商品資料表格,實現訂單與商品間的多對多關係)
- 訂單資料表格:wp_fg_orders (id, 日期, 客戶id),客戶id關聯至WordPress的users表格裏的 user_login欄位
-- -- 資料表結構 `wp_fg_orders` -- CREATE TABLE `wp_fg_orders` ( `id` int(11) NOT NULL, `date` date NOT NULL, `cust_id` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- -- 已傾印資料表的索引 -- -- -- 資料表索引 `wp_fg_orders` -- ALTER TABLE `wp_fg_orders` ADD PRIMARY KEY (`id`); -- -- 在傾印的資料表使用自動遞增(AUTO_INCREMENT) -- -- -- 使用資料表自動遞增(AUTO_INCREMENT) `wp_fg_orders` -- ALTER TABLE `wp_fg_orders` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; COMMIT;
- 飲料資料表格:wp_fg_drinks (id, 名稱,單價)
-- -- 資料表結構 `wp_fg_drinks` -- CREATE TABLE `wp_fg_drinks` ( `id` int(11) NOT NULL, `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `price` float NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- -- 已傾印資料表的索引 -- -- -- 資料表索引 `wp_fg_drinks` -- ALTER TABLE `wp_fg_drinks` ADD PRIMARY KEY (`id`); -- -- 在傾印的資料表使用自動遞增(AUTO_INCREMENT) -- -- -- 使用資料表自動遞增(AUTO_INCREMENT) `wp_fg_drinks` -- ALTER TABLE `wp_fg_drinks` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; COMMIT;
- 訂單-飲料資料表格:wp_fg_order-drinks (訂單id, 飲料id, 數量)
-- -- 資料表結構 `wp_fg_order-drinks` -- CREATE TABLE `wp_fg_order-drinks` ( `order_id` int(11) NOT NULL, `drink_id` int(11) NOT NULL, `quantity` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- -- 已傾印資料表的索引 -- -- -- 資料表索引 `wp_fg_order-drinks` -- ALTER TABLE `wp_fg_order-drinks` ADD PRIMARY KEY (`order_id`,`drink_id`); COMMIT;