?
??? 更正:和大家交流了一下,發現現在就叫做架構有一點大,還是叫做框架更準確一些,就叫做 自然框架 吧。
??? 目前自然框架的內容包括三個部分:使用自定義控件快速實現增刪改查和導出Excel、通用權限、個性化設置。
?
??? 上一篇里? 球球 ?同學詢問“ 不太明白需求是怎么轉化為數據庫的。比如一個最簡單的會員例子,累計1萬消費以上是一級會員,5000消費以上是2級會員,買商品屬于1級會員的8折,屬于2級會員的9折,這個業務邏輯要怎么轉化成數據庫?” 那我就以這個作為例子說一下吧。
?
????
根據這個需求我們可以得到以下幾個已知條件
:
1、有會員信息——會員表。
2、會員要有等級,建立一個會員等級表。
3、會員的等級是依據累計消費金額而定。5000元以上是二級會員,10000元以上是一級會員。
4、有產品信息——產品表。
5、會員購買產品可以享受折扣,折扣根據會員的級別而定。
?
??? 問題
:
1、會員級別的確定?
2、如何獲得會員購買商品的折扣?
我們可以在數據庫里面建立四個表:【會員表】、【會員等級表】、【產品表】、【會員享受的折扣表】。
【示意圖】。
?
?
?
(這里的商品表怎么還有商品等級ID呢?折扣表里面也有?這個后面的需求擴展里面的,本來要做兩套圖的,俺就偷懶了)
?
??? 回答
:
1、會員級別是依據會員的消費累計金額來確定的,那么當前的會員消費金額就是已知條件,我們可以把它作為函數的參數,于是我們可以寫一個函數:
?
????????{
????????????DataAccessLayer?dal? = ? new ??DataAccessLayer();
????????????
???????????? // 依據累計的消費金額,確定會員的等級
????????????sql? = ? " SELECT?TOP?1?會員級別ID?FROM?Demo_會員級別表?WHERE?(消費金額?<? " + ?money? + " ) " ;
???????????? string ?會員級別ID? = ?dal.RunSqlGetID(sql);
???????????? // 修改會員的等級
????????????sql? = ? " update?Demo_會員表?set?會員級別ID?=? " ? + ?會員級別ID? + ? " ?where?memberID=? " ? + ?memberID.ToString();
????????????dal.RunSql(sql);
????????????
????????}
?
?
??? 當然我們也可以把第一個SQL語句作為一個子查詢,加在第二個SQL語句里面。
??? 或者如果我們可以知道會員原先的級別的話,我們可以先做一下比較,會員級別變化的時候在修改會員的等級。
?
2、這個就簡單了,會員享受的折扣是和等級相關的,我們有了會員享受的折扣表,寫一條SQL語句就出來了。
?
?
?
??? 不知道這個是不是求求想要的。
?
??? 功能擴展
???? 這個會員折扣的例子,讓我想起來了去年看的一篇帖子,和這個很像,區別在于商品也是分等級的,不同的會員等級對應不同的產品等級可以享受不同的折扣,比如會員有三個等級——一級、二級、三級,產品有兩個等級——優等、一般。
那么就會出現一個笛卡爾乘積的形式:
一級會員購買優等商品享受九折,
一級會員購買一般商品享受八折,
二級會員購買優等商品享受九五折,
二級會員購買一般商品享受八五折,
三級會員購買優等商品享受九九折,
三級會員購買一般商品享受九折。
?
??? 以前的那個帖子的要求就是如何依據會員的等級和商品的等級來判斷享受的折扣。
??? 我們看看如何來解決這個問題。我們的商品表里面加上商品等級字段,在【會員享受的折扣表】里面也加上一個商品等級ID字段。剩下的就不用說了吧,只需要稍稍改一下那個SQL語句就可以了。
?
?
??? 如果您也看多那篇帖子的話,您會發現那篇帖子用了好長的代碼才解決,當然人家是用了OO的方法,好像解決的還挺巧妙地,我的OO水平還不夠,沒有看懂。
?
FAQ
1、為什么要建立【會員等級表】、【商品等級表】?
???? 因為建立表以后,就可以做一個維護程序讓客戶自己維護這兩個級別。
2、為什么要建立【會員享受的折扣表】?
??? 理由同上,我們也可以做一個維護程序,這樣享受什么樣的折扣,客戶就可以隨時修改了。
?
ps: 博客園北京俱樂部第三次技術活動(2009/05/23) ?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
