国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

數(shù)據(jù)庫的反范式設(shè)計

2024-07-21 02:52:56
字體:
供稿:網(wǎng)友

范式設(shè)計可以消除數(shù)據(jù)庫的數(shù)據(jù)冗余及插入異常,但是過分的范式設(shè)計可能導致數(shù)據(jù)查詢時需要關(guān)聯(lián)多張表,導致數(shù)據(jù)庫查詢效率下降,因此在實際工作中,需要適當?shù)姆捶妒皆O(shè)計。

舉例說明,某在線圖書銷售網(wǎng)站,希望實現(xiàn)如下功能: 1)用戶登錄 2)用戶管理 3)商品展示 4)商品管理 5)供應商管理 6)在線銷售

符合三范式的數(shù)據(jù)庫設(shè)計

用戶信息表 : 用戶名(主鍵),密碼,姓名,手機號,注冊日期

圖書信息表 : 圖書名稱(主鍵),出版社名詞,圖書價格圖書描述,作者

分類信息表 : 分類名詞(主鍵),分類描述

圖書分類表 : (圖書名詞,圖書分類)(主鍵)

供應商信息表:出版社名詞(主鍵),地址,電話,聯(lián)系人,銀行帳號

訂單表:訂單編號(主鍵),用戶名,下單日期,物流單號

訂單圖書關(guān)聯(lián)表 : (訂單編號,圖書名稱)(主鍵), 商品數(shù)量

在如上的數(shù)據(jù)庫設(shè)計中,如果需要查詢每個用戶的消費總金額

select 用戶名, sum(c.圖書價格*b.商品數(shù)量)

from 訂單表 a join 訂單圖書關(guān)聯(lián)表 b on a.訂單編號=b.訂單編號

                          join 圖書信息表 c on b.圖書名稱=c.圖書名稱

group by 用戶名

以上查詢需要關(guān)聯(lián)3張表,因為在線銷售經(jīng)常會有促銷活動,商品價格時而會波動,在以上設(shè)計中,如果圖書價格發(fā)生變化,則查詢結(jié)果也會發(fā)生變化。

如果需要查詢下單用戶和訂單詳情

select  a.訂單編號 a.用戶名 c.圖書名稱 b.商品數(shù)量 c.圖書價格

from 訂單表 a join 訂單圖書關(guān)聯(lián)表 b on a.訂單編號=b.訂單編號

                         join 圖書信息表 c on b.圖書名稱=c.圖書名稱

以上查詢也需要關(guān)聯(lián)3張表格。

反范式設(shè)計 ,在 訂單表  和 訂單圖書關(guān)聯(lián)表 中增加冗余數(shù)據(jù)

訂單表:訂單編號(主鍵),用戶名,下單日期,物流單號,訂單金額

訂單圖書關(guān)聯(lián)表 : (訂單編號,圖書名稱)(主鍵), 商品數(shù)量,圖書價格

在如上的數(shù)據(jù)庫設(shè)計中,如果需要查詢每個用戶的消費總金額

select 用戶名,sum(訂單金額) from 訂單表 group by (用戶名)

需要查詢下單用戶和訂單詳情

select  a.訂單編號 a.用戶名 b.圖書名稱 b.商品數(shù)量 b.圖書價格

from 訂單表 a join 訂單圖書關(guān)聯(lián)表 b on a.訂單編號=b.訂單編號

反范式設(shè)計后,因為 訂單圖書關(guān)聯(lián)表 已經(jīng)保存了當時的商品價格,所以商品價格波動并不影響查詢結(jié)果,而且減小查詢需要關(guān)聯(lián)的表。

反范式設(shè)計需要更具具體業(yè)務(wù)實際決定,將經(jīng)常使用的業(yè)務(wù)表進行合理的反范式設(shè)計可以提高數(shù)據(jù)庫的查詢效率。

在實際的業(yè)務(wù)工作中,一般不使用外鍵,因為外鍵會在每次數(shù)據(jù)插入時進行合法性校驗,這樣回極大的拖累數(shù)據(jù)庫的插入效率。


上一篇:從SQL到NoSQL

下一篇:數(shù)據(jù)庫范式

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 合川市| 乳山市| 常山县| 错那县| 青河县| 清苑县| 云和县| 凌源市| 弋阳县| 蒙阴县| 张家口市| 河间市| 邻水| 杨浦区| 临安市| 黑龙江省| 象山县| 冷水江市| 延寿县| 赞皇县| 康马县| 东源县| 临夏县| 阳高县| 鄂伦春自治旗| 云梦县| 个旧市| 玉溪市| 虞城县| 汝州市| 兴城市| 临洮县| 西丰县| 精河县| 会昌县| 湘西| 鄂托克前旗| 金沙县| 尼勒克县| 沧州市| 肇庆市|