數據庫表的設計
不是數據庫表設計大神
最近做訂單系統,出現問題是這樣的,
有客戶表,訂單表,套餐表.
通過下單生成訂單表. 付款後更改訂單狀態碼為1(表示已付款)
(1)如果甲訂購2份黃燜雞米飯,1瓶礦泉水,那麽這個訂單如何保存這個數據?
剖析:
整個訂單系統還要能通過用戶修改已下單但未付款的訂單內容嗎?(或許直接取消這次訂單重新下單更好)
每個套餐的數量要放入一個food_numbers字段中,這個字段放在哪裏才合適?不在foods這個食品套餐表,因為foods表中純粹是食品套餐信息.
要有一個表可以存放點選的套餐的food_id和food_numbers,(但如果如下圖,使用字符串字段,存放著food_name,food_numbers,及單筆*數量的price)
(2)通過varchar(2)的字段不可再查,不太靈活.
如果是有個購物車表,(其實可以想成Order_id,訂單表)
每個小訂單,存放著訂單序列ID,用戶ID,及食品套餐ID,及這個套餐的訂購數量.
這樣通過food_id可以修改其數量,而且通過這個cart_id保存不同的food_id及數量.
然後在訂單表中加入這個cart_id作為外鍵,但這個cart_id必須保持是相同的,而不是序列生成的.
(3)一個人購物,一般是用一個購物車,購物籃.
用戶在同一時間購買多樣的食品及其數量.按下[下單]按鈕,此時只生成一個cart_id,但表中這次購買下單的元組為有幾樣不同的就幾行元組.
Dao層可以獲取要插入的下一個序列的值,傳導時雖然執行了兩次Dao與數據庫的sql連接,(因為要插入數據customer_id,food_id和food_numbers)
也就是說,這個insertNewCart的Service層接收的是一個這樣的數據:
import java.util.ArrayList; public class Carts { private long cart_id;//購物車ID private long customer_id;//用戶ID private ArrayList<Long> food_id;//食品(商品)ID private ArrayList<Integer> food_numbers;//食品數量值 /////* 客戶下單後創建此對象 new Carts(接收一個購物車數據)public Carts(long cart_id, long customer_id, ArrayList<Long> food_id, ArrayList<Integer> food_numbers) { this.cart_id = cart_id; this.customer_id = customer_id; this.food_id = food_id; this.food_numbers = food_numbers; } }
但傳導的數據應是多個,即集合的food_id和food_numbers.
而cart_id是那麽一個,用戶id(customer_id)是那麽一個,這倆ID在一次下單是只是那麽同一個,
而購物車中的food和數量是不固定的,所以使用ArrayList<Long/Integer>存儲起來.
(4)使用CartsService
數據庫表的設計