freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

范式及其對數(shù)據(jù)庫設(shè)計的指導意義(編輯修改稿)

2025-02-14 20:06 本頁面
 

【文章內(nèi)容簡介】 6 01 5 套裝 010202 職業(yè)裝 7 02 5 職業(yè)裝 010203 休閑裝 8 03 5 休閑裝 0103 童裝 9 03 1 童裝 02 電器 10 02 0 電器 0201 進口 11 01 10 進口 0202 國產(chǎn) 12 02 10 國產(chǎn) 03 日用品 13 03 0 日用品 為以后算法實現(xiàn)的方便,左邊設(shè)計第一行為根結(jié)點,并且 code類型必須使用 var char避免空格。以下假設(shè)上列數(shù)據(jù)對應兩個表: classes_1和 classes_2。 35 兩種設(shè)計的比較:范式的意義 兩種設(shè)計的可行性:原始設(shè)計中關(guān)系雖然不符合 1NF, 但此設(shè)計中代碼包含了分類樹的所有結(jié)構(gòu)信息,所以設(shè)計方案是可行的。規(guī)范后的設(shè)計通過 pid建立結(jié)點的父子關(guān)系同樣包含了樹的所有結(jié)構(gòu)信息,所以也是可行的。 比較方法:從冗余、 擴展能力及空間利用率 、結(jié)點 引用 和各種算法四個方面進行比較 36 一)冗余 每一個結(jié)點只需要知道其父結(jié)點代碼,就可以構(gòu)建一棵樹,而根據(jù)第一種設(shè)計,其每一個結(jié)點均包含了其所有祖先的結(jié)點代碼,這就是冗余的信息。 設(shè)計一冗余的信息被隱藏在一個列中,并且 隨樹結(jié)構(gòu)層數(shù)的增加而增加 設(shè)計二沒有冗余 37 二)擴展能力及空間利用率 第一種設(shè)計表示的樹結(jié)點的層數(shù)受 code列長度的限制,而第二種設(shè)計則沒有這種限制。 為了能適應結(jié)點層數(shù)的擴展,第一種設(shè)計不得不加大code列的長度,由于 code列為主碼,從效率角度考慮,通常其數(shù)據(jù)類型會首先考慮使用 char型,所以在實際的代碼后會存在大量的空格。 在每一級代碼長度不一樣的情況下,第二種設(shè)計的code列同樣會產(chǎn)生少量的空格,但由于 code列不是主碼,可以把其類型定義為 varchar解決這個問題。 38 三) 結(jié)點的引用 第一種設(shè)計若直接選擇 code列主碼,則一旦代碼進行修改,通過外鍵引用該表的關(guān)系也要做修改。 第二種設(shè)計由于其他關(guān)系通過 id列引用該表,所以當 code列修改后,通過外鍵引用該表的關(guān)系無需做修改。 作為外碼,引用第二種設(shè)計的 id對空間的占用比引用第一種設(shè)計 code對空間占用要小。 設(shè)計一也可人為地增加一個主碼,但客觀上又造成新的空間占用。 39 四) 算法比較 1) 規(guī)范化設(shè)計較非規(guī)范化設(shè)計簡單的算法: 對某個結(jié)點是否為葉結(jié)點的判斷 ? 通過判斷 select結(jié)果是否為空,第一種設(shè)計select的 where條件較復雜 獲取所有葉結(jié)點 ? 都需要使用子查詢,但設(shè)計一子查詢中要引用主查詢中的列 獲取某個結(jié)點從根結(jié)點開始的完整路徑 ? 都可以使用 select獲得,但設(shè)計一更復雜 40 2)規(guī)范化設(shè)計與非規(guī)范化設(shè)計復雜性相近的算法 結(jié)點的遷移、復制和交換 例 1:把 0101下的所有結(jié)點復制到 0102的結(jié)點下 結(jié)點的增加、刪除和修改 逐級求和的實現(xiàn) 例 2 :逐級求和的演示 41 例 1:把 0101下的所有結(jié)點復制到 0102的結(jié)點下 code name ? id code pid name 0 0 01 服裝 1 01 0 服裝 0101 男裝 2 01 1 男裝 010101 西裝 3 01 2 西裝 01010101 全毛 4 01 3 全毛 01010102 化纖 5 02 3 化纖 010102 休閑裝 6 02 2 休閑裝 0102 女裝 7 02 1 女裝 010201 套裝 8 01 7 套裝 010202 職業(yè)裝 9 02 7 職業(yè)裝 010203 休閑裝 10 03 7 休閑裝 010204 西裝 11 04 7 西裝 01020401 全毛 12 01 11 全毛 01020402 化纖 13 02 11 化纖 010205 休閑裝 14 05 7 休閑裝 42 code amt ? id code pid amt 0 0 01 900 1 01 0 900 0101 300 2 01 1 300 010101 100 3 01 2 100 010102 200 4 02 2 200 0102 390 5 02 1 390 010201 120 6 01 5 120 010202 130 7 02 5 130 010203 140 8 03 5 140 0103 210 9 03 1 210 02 290 10 02 0 290 0201 140 11 01 10 140 0202 150 12 02 10 150 03 300 13 03 0 300 例 2:各結(jié)點包含數(shù)量的逐級求和 43 3)規(guī)范化設(shè)計劣于非規(guī)范化設(shè)計的算法 取某結(jié)點的所有子結(jié)點 獲取結(jié)點所在層數(shù) 某級代碼長度加長 獲得結(jié)點在設(shè)計一中的 code 注:可以在第二種設(shè)計中增加一個 level列表示一個結(jié)點所在的層數(shù),這樣可以使第 1到第3個算法變得和非規(guī)范化設(shè)計一樣簡單 44 例 3:一些算法的實現(xiàn)或思路 設(shè)計一:判定 code=codev結(jié)點是葉結(jié)點 select * from classes_1 where code like codev+?%? and len(code)len(codev)為空集。 設(shè)計二:判定 id=idv結(jié)點是葉結(jié)點 select * from classes_2 where pid=idv為空集。 設(shè)計一:取出所有葉結(jié)點 select * from classes_1 a where not exists (select * from classes_1 where code like rtrim()+39。%39。 and len(rtrim(code))len(rtrim())) 45 設(shè)計二:取出所有葉結(jié)點 即獲取 id不出現(xiàn)在父結(jié)點集中的結(jié)點 ? 全體父結(jié)點集的 id: select pid from classes_2 where pid is not null ? 所有葉結(jié)點: select * from classes_2 where id not in (select pid from classes_2 where pid is not null) 設(shè)計二:獲得結(jié)點路徑 select isnull(,39。39。)+39。/39。+ isnull(,39。39。)+39。/39。+isnull(,39。39。) from classes_2 a,classes_2 b,classes_2 c where = and = ? 表達式中有部分值為 null, 則整個表達式值為 null, 有些DBMS會把 null處理為空串。 ? 該語句對最大級數(shù)為 1, 2, 3均適用,若級數(shù)大于 3,上述語句可作相應擴展。 46 設(shè)計一算法:取代碼為 codev結(jié)點的所有子結(jié)點 select * from classes_1 where code like codev+”%” 設(shè)計二算法:取 id=idv結(jié)點的所有子結(jié)點 select * from classes_2 where pid=idv or pid in (select id from classes_2 where pid=idv) 47 結(jié)點的遷移、復制和交換 ? 例:把男裝下所有子結(jié)點(西裝和休閑裝)復制到女裝下 ? 算法:掃描要復制的子結(jié)點,若是第一層子結(jié)點,依次產(chǎn)生新的代碼,若非第一層子結(jié)點 ? 設(shè)計一:則代碼為上一層新增的代碼 +
點擊復制文檔內(nèi)容
教學課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1