1. 程式人生 > >數據庫表的設計

數據庫表的設計

long cart arraylist clas his 存儲 使用 數據庫 spa

不是數據庫表設計大神

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

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

通過下單生成訂單表. 付款後更改訂單狀態碼為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

數據庫表的設計