天天看點

資料庫表的設計

Do 資料庫表設計大神

最近做訂單系統,出現問題是這樣的,

有客戶表,訂單表,套餐表.

通過下單生成訂單表. 付款後更改訂單狀态碼為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 可以修改其數量,而且通過這個 card_id 儲存不同的 food_id 及數量.

然後在訂單表中加入這個 cart_id 作為外鍵,但這個 cart_id 必須保持是相同的,而不是序列生成的.

(3)一個人購物,一般是用一個購物車,購物籃.

使用者在同一時間購買多樣的食品及其數量.按下[下單]按鈕,此時隻生成一個 cart_id ,但表中這次購買下單的元組為有幾樣不同的就幾行元組.

Dao 層可以擷取要插入的下一個序列的值,傳導時雖然執行了兩次 Dao 與資料庫的 SQL 連接配接,(cart_id,customer_id,food_id,food_numbers)

也就是說,這個 createNewCart( cart_id,customer_id,food_id,food_numbers ) 的 Service 層接收的是一個這樣的資料:

但傳導的資料應是多個,即集合的  food_id 和 food_numbers.

而 cart_id 是那麼一個,使用者 ID( customer_id )是那麼一個,這倆 ID 在一次下單是隻是那麼同一個,

而購物車中的 food 和數量是不固定的,是以使用 ArrayList<Long/Integer> 存儲起來.

(4)使用 CartsService

待更,今天太晚了,開着部落格碼代碼了邏輯通順了.

不完善 ???? 待更新

資料庫表的設計

繼續閱讀