本文的核心內容:記錄積累一些庫表設計方案與技巧
資料庫表的選單【分類】設計:如省市關聯、圖書的
一、二級分類。
資料庫表設計之購物車,利用session暫時儲存購物車資訊。
booktype 一級分類: 少兒、外語、計算機
bookclass 二級分類: 少兒[0-2歲、3-6歲、7-10歲、11-14歲、兒童文學]
外語[英語、日語、韓語、俄語、德語]
計算機[計算機理論、計算機考試、資料庫、人工智慧、程式設計]
bookinf 圖書詳情 : 圖書資訊的詳細字段。。。
基於以上關係:我們建表有兩種方法
①:建立三張表 一級分類表,二級分類表、圖書詳情表
一級分類id->作為二級分類的外來鍵
二級分類id->作為圖書詳情的外來鍵
這一種依賴外來鍵,實體模型也比較簡單。(不再過多描述)
查詢語句:可以採用 left join on 或者 等值連線 將二級分類的外來鍵與一級分類的主鍵等值連線即可查詢。
②:建立兩張表 一級分類和二級分類合併成一張表
圖書詳情表(引用typeid為外來鍵)
typeid 指一級二級分類的id(唯一標識、主鍵) 序列自增從1開始。
typename 指一級二級分類的名字
parentid 指二級分類所屬一級分類typeid (若為一級分類則填」0」與二級分類加以區分)
countnumber 指一級圖書包含二級圖書的個數
二級分類所包含詳細圖書的個數
資料庫查詢一級分類資訊的sql
select typeid,typename,parentid,countnumber
from t_booktype where parentid='0'
資料查詢二級分類資訊(利用表的自連線)
select child.typeid,child.typename,
child.parentid,child.countnumber
from t_booktype child ,t_booktype parent
where child.parentid=parent.typeid
在電商軟體,必不可少的模組就是購物車。
我分享兩種設計方法:
①:維護一張購物車表,以使用者id為外來鍵
乙個使用者乙個購物車,使用者註冊成功的同時,為使用者在購物車表內維護乙個專屬於使用者的購物車。(根據我以前學到的知識,這一步可以為使用者表建立insert觸發法器,當使用者註冊成功[觸發器將使用者id作為外來鍵插入購物車表],使用者即擁有了唯一的購物車)
t_car
字段型別
說明car_id
varchar2(36)
購物車編號 主鍵
user_id
varchar2(36)
外來鍵 使用者唯一標識
car_status
varchar2(4)
購物車狀態
t_shop_item
字段型別
說明shop_item_id
varchar2(36)
購物項編號 主鍵
car_id
varchar2(36)
購物車編號 外來鍵
product_id
varchar2(36)
商品編號 外來鍵
count
number(4)
數量price
number(8,2)
**productname
varchar(30)
商品名這麼實現購物車的弊端:①:非該**的註冊使用者無法將商品加入購物車。這與現實的情況不符合。一般我們訪問某寶,某東,我們可以以遊客的方式將商品加入購物車,直到下訂單、付款時才要求我們必須登入。②:每個使用者維護一下購物車似乎不太明智,顧客將商品加入購物車到下訂單,完成交易,這一需求對資料庫更改頻繁。
②:所有使用者共用乙個」購物車」
我們可以直接以使用者id為標識,區分購物車商品所屬的使用者。
t_shop_item
字段型別
說明shop_item_id
varchar2(36)
購物項編號 主鍵
user_id
varchar2(36)
使用者編號 外來鍵
productid
varchar2(36)
商品編號 外來鍵
count
number(4)
數量price
number(8,2)
**productname
varchar(30)
商品名即使減少了一張購物車表,但是這錶還需要使用者登入才能記錄使用者新增商品情況。
③:利用session暫時儲存購物車內的東西
[使用者不登入就能新增商品到購物車;使用者登入狀態將session中的資訊存入非關係型資料庫、關係型資料庫。將購物車內的東西持久化儲存]
明確一點:session -> 一次會話有效(在使用者不關閉瀏覽器的前提下,預設存在30分鐘;使用者關閉瀏覽器再次開啟後,未登入使用者的購物車將清空。)
解決如何用session儲存購物車內資訊。
第乙個難點:那麼如何準確區分不同的商品? (自然是商品id)
第二個難點:那麼如何準確標記乙個進入購物車的商品? (只有商品id是不行的)
商品id,通過商品id,我們可以查詢到商品詳情。(**、名稱等等)
同一商品的購買數量。這一資訊是不存在於商品詳情的。【重點,不能忽略】
這兩個資訊必須儲存。於是我想到map(兩個原因)。
①:儲存兩個值
mapmap=new hashmap();
key儲存 商品id, value儲存 商品數量(購買數量)
②:保證商品id(鍵)的唯一性
map的特點:鍵唯一,值可以重複。我們以商品id為鍵,這樣就可以保證商品的唯一性。
我們再將map存入session中就可以了。
當使用者新增商品時,只需先從session中取出map,迭代遍歷判斷key是否已經存在,若存在取value值加1;若不存在則將商品id作為key,value數量預設為1,put進map。
當使用者(未登入)檢視購物車時,只需從session中取商品id和數量,就可以顯示購車內商品的詳細資訊,計算購物車內的商品總**。
這種儲存方式簡化了新增商品進入購物車和刪除購物車裡商品的操作。但是卻不得不再次封裝乙個map物件將購物車詳情頁面的資訊儲存進去,以供購物車展示頁面顯示資料。
(這是我第一次考慮的儲存方案,寫到檢視購物車詳情頁面才發現不合理之處。)
改進版本:
map map=new hashmap();
key ->商品id
value->購物車頁面需要展示的商品詳情(商品名、商品id、商品數量、商品**等)
核心:value值維護不再是乙個商品數量,而是我們封裝的模擬購物車實體物件
jsp頁面的效果圖
源**:新增商品的action
//新增商品action
public string addtocar() throws exceptionelseelse
} return action.success;
}
資料庫表設計
在軟體的開發中,資料庫表的設計是十分基礎和重要的工作。資料庫表是軟體具體實現的基石,如果表設計的不合規範就會出現資料冗餘,跟業務脫節等問題,等出現問題後再做大的調整相應的依賴表的編碼測試等工作也會進行大的調整這樣就會造成極大的資源消耗。因此在專案一開始設計表的時候就要注意表設計的規範性問題。資料庫 ...
資料庫表設計
什麼是設計三正規化 1.1 設計表的依據 按照這個三正規化設計的表不會出現資料冗餘 三正規化都有哪些 第一正規化 任何一張表都有乙個主鍵,並且每乙個字段原子性不可以再分 例子不滿足第一正規化 學生標號 學生姓名 001jaden zjl 123.com,13029199039 002haoyue w...
資料庫表設計
1 資料型別要合理 1 對於數字和日期型別,一般不要採用 varchar 型別,這個陷阱很容易被接受 1 容易帶來隱式型別轉換,導致索引失效,例如 where a 123 a 是varchar 列,實際儲存數字型別值 2 容易帶來資料質量的下降,例如日期型別 2019 01 23 2019 23 0...