DB設計03:寫給開發(fā)者看的關(guān)系型數(shù)據(jù)庫設計_第1頁
DB設計03:寫給開發(fā)者看的關(guān)系型數(shù)據(jù)庫設計_第2頁
DB設計03:寫給開發(fā)者看的關(guān)系型數(shù)據(jù)庫設計_第3頁
DB設計03:寫給開發(fā)者看的關(guān)系型數(shù)據(jù)庫設計_第4頁
DB設計03:寫給開發(fā)者看的關(guān)系型數(shù)據(jù)庫設計_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、寫給開發(fā)者看的關(guān)系型數(shù)據(jù)庫設計2013-03-28 10:22 meteorseed 博客園我要評論(0)字號:t | t收藏數(shù)據(jù)庫設計,一個軟件項日成功的基右。很多從業(yè)人員都認為,數(shù)據(jù)庫設計其實不那么重要。現(xiàn)實中的情 景也相當雷同,開發(fā)人員的數(shù)量是數(shù)據(jù)庫設計人員的數(shù)倍。多數(shù)人使用數(shù)據(jù)庫中的一部分,所以也會把數(shù) 據(jù)庫設計想的如此簡單。其實不然,數(shù)據(jù)庫設計也是門學問。ad:2013云計算架構(gòu)師峰會超低價搶票中數(shù)據(jù)庫設計,一個軟件項h成功的基石。很多從業(yè)人員都認為,數(shù)據(jù)庫設計其實不那么重要。現(xiàn)實中的情 景也相當雷同,開發(fā)人員的數(shù)量是數(shù)據(jù)庫設計人員的數(shù)倍。多數(shù)人使用數(shù)據(jù)庫中的一部分,所以也會把數(shù) 據(jù)

2、庫設計想的如此簡單。其實不然,數(shù)據(jù)庫設計也是門學問。從筆者的經(jīng)歷看來,筆者更贊成在項目早期由開發(fā)者進行數(shù)據(jù)庫設計(后期調(diào)優(yōu)需要dba)。根據(jù)筆者的 項冃經(jīng)驗,一個將通oop和orm的開發(fā)者,設計的數(shù)據(jù)庫往往更為合理,更能適應需求的變化,如果追其 原因,筆者個人猜測是因為數(shù)據(jù)庫的規(guī)范化,與00的部分思想雷同(如內(nèi)聚)。而dba,設計的數(shù)據(jù)庫的 優(yōu)勢是能將dbms的能力發(fā)揮到極致,能夠使用sql和dbms實現(xiàn)很多程序?qū)崿F(xiàn)的邏輯,與開發(fā)者相比,dba 優(yōu)化過的數(shù)據(jù)庫更為髙效利穩(wěn)定。如標題所示,木文旨在分享一名開發(fā)者的數(shù)據(jù)庫設計經(jīng)驗,并不涉及復 雜的sql語句或dbms使用,因此也不會局限到某種dbm

3、s產(chǎn)品上。真切地希望這篇文章對開發(fā)者能冇所幫 助,也希望讀者能幫助筆者査漏補缺。一 codd的rdbms 12法則rdbms的起源edgar frank codd (埃徳加弗蘭克科徳)被譽為“關(guān)系數(shù)據(jù)庫之父”,并因為在數(shù)據(jù)庫管理系統(tǒng)的理 論和實踐方面的杰出貢獻于1981年獲圖靈獎。在1985年,codd廨士發(fā)布了 12條規(guī)則,這些規(guī)則簡明的 定義出一個關(guān)系型數(shù)據(jù)庫的理念,它們被作為所有關(guān)系數(shù)據(jù)庫系統(tǒng)的設計指導性方針。1. 信息法則關(guān)系數(shù)據(jù)庫中的所有信息都用唯一的-種方式表示表中的值。2. 保證訪問法則依靠表名、寶鍵值和列名的組合,保證能訪問每個數(shù)據(jù)項。3. 空值的系統(tǒng)化處理支持空值(null)

4、,以系統(tǒng)化的方式處理空值,空值不依賴于數(shù)據(jù)類型。4. 基于關(guān)系模型的動態(tài)聯(lián)機日錄數(shù)據(jù)庫的描述應該是自描述的,在邏輯級別上和普通數(shù)據(jù)采用同樣 的表示方式,即數(shù)據(jù)庫必須含冇描述該數(shù)據(jù)庫結(jié)構(gòu)的系統(tǒng)表或者數(shù)據(jù)庫描述信息應該包含在用戶 可以訪問的表中。5. 統(tǒng)-的數(shù)據(jù)子語言法則一個關(guān)系數(shù)據(jù)庫系統(tǒng)可以支持兒種語言和多種終端使川方式,但必須至少 有一種語言,它的語句能夠一某種定義良好的語法表示為字符串,并能全面地支持以下所有規(guī)則: 數(shù)據(jù)定義、視圖定義、數(shù)據(jù)操作、約束、授權(quán)以及事務。(這種語言就是sql)6. 視圖更新法則所冇理論上可以更新的視圖也可以由系統(tǒng)更新。7. 爲級的插入、更新和刪除操作把一個基礎關(guān)系

5、或派生關(guān)系作為單個操作對象處理的能力不僅適應 丁-數(shù)據(jù)的檢索,還適川丁-數(shù)據(jù)的插入、修改個刪除,即在插入、修改和刪除操作中數(shù)據(jù)行被視作 集合。8. 數(shù)據(jù)的物理獨立性不管數(shù)據(jù)庫的數(shù)據(jù)在存儲表示或訪問方式上怎么變化,應用程序和終端活動都 保持著邏輯上的不變性。9. 數(shù)據(jù)的邏輯獨立性當對表做了理論上不會損害信息的改變時,應用程序和終端活動都會保持邏輯 上的不變性。10. 數(shù)據(jù)完整性的獨立性專用于某個關(guān)系型數(shù)據(jù)庫的完藥性約束必須可以用關(guān)系數(shù)據(jù)庫子語言定義, 而口可以存儲在數(shù)據(jù)目錄中,而非程序中。11. 分布獨立性不管數(shù)據(jù)在物理是否分布式存儲,或者任何時候改變分布策略,rdbms的數(shù)據(jù)操縱子 語言必須能

6、使應用程序和終端活動保持邏輯上的不變性。12. 非破壞性法則如果一個關(guān)系數(shù)據(jù)庫系統(tǒng)支持某種低級(一次處理單個記錄)語言,那么這個低級 語言不能違反或繞過更鬲級語言(一次處理多個記錄)規(guī)定的完整性法則或約束,即用戶不能以 任何方式違反數(shù)據(jù)庫的約束。二關(guān)系型數(shù)據(jù)庫設計階段(一)規(guī)劃階段規(guī)劃階段的主要工作是對數(shù)據(jù)席的必要性和可行性進行分析。確定是否需要使用數(shù)據(jù)庫,使用哪種類型的 數(shù)據(jù)庫,使用哪個數(shù)據(jù)庫產(chǎn)品。(二)概念階段概念階段的主要工作是收集并分析需求。識別需求,主要是識別數(shù)據(jù)實體和業(yè)務規(guī)則。對于一個系統(tǒng)來說, 數(shù)據(jù)庫的主要包括業(yè)務數(shù)據(jù)利非業(yè)務數(shù)據(jù),而業(yè)務數(shù)據(jù)的定義,則依賴于在此階段對用戶需求的分

7、析。需 耍盡暈識別業(yè)務實體和業(yè)務規(guī)則,對系統(tǒng)的整體冇初步的認識,并理解數(shù)據(jù)的流動過程。理論上,該階段 將參考或產(chǎn)出多種文檔,比如“用例圖”,“數(shù)據(jù)流圖”以及其他-些項冃文檔。如果能夠在該階段產(chǎn)出 這些成果,無疑將會對后期進行莫大的幫助。當然,很多文檔已超出數(shù)據(jù)庫設計者的考慮范圍。而且,如 果你并不精通該領(lǐng)域以及用戶的業(yè)務,那么諸放棄自己獨立完成用戶需求分析的想法。用戶并不是技術(shù)專 家,而當你自身不能扮演“業(yè)務顧問”的角色時,請你選擇與項日組的相關(guān)人員合作,或者將其視為風險 呈報給pm。再次強調(diào),大多數(shù)悄況,用戶只是行業(yè)從業(yè)者,而非職業(yè)技術(shù)人員,我們僅僅從用戶那里收集 需求,而非依賴于用戶的知識

8、。記錄用戶辭求時,可以使用一些技巧,當然這部分內(nèi)容冇些可能會超出數(shù)據(jù)庫設計人員的職責: 努力維護一系列包含了系統(tǒng)設計和規(guī)格說明信息的文檔,如會議記錄、訪談記錄、關(guān)鍵用戶期望、 功能規(guī)格、技術(shù)規(guī)格、測試規(guī)格等。 頻繁與干系人溝通并收集反饋。 標記出你自c添加的,不屬于客戶要求的,耒決內(nèi)容。 與所冇關(guān)鍵干系人盡快確認項目范圍,并力求凍結(jié)緡求。此外,必須嚴謹處理業(yè)務規(guī)則,并詳細記錄。在之后的階段,將會根據(jù)這些業(yè)務規(guī)則進行設計。當該階段結(jié)束時,你應該能夠回答以下問題: 需要哪些數(shù)據(jù)? 數(shù)據(jù)該被怎樣使用? 哪些規(guī)則控制著數(shù)據(jù)的使用? 誰會使用何種數(shù)據(jù)? 客戶想在核心功能界面或者報表上看到哪些內(nèi)容? 數(shù)據(jù)

9、現(xiàn)在在哪里? 數(shù)擁是否與其他系統(tǒng)有交互、集成或同步? 主題數(shù)據(jù)有哪些? 核心數(shù)據(jù)價值幾何,對可靠性的要求程度?并且得到如下信息: 實體和關(guān)系 屬性和域 可以在數(shù)據(jù)庫中強制執(zhí)行的業(yè)務規(guī)則 需要使用數(shù)據(jù)庫的業(yè)務過程(三)邏輯階段邏輯階段的主要工作是繪制e-r圖,或者說是建模。建模工具很多,有不同的圖形表示方法和軟件。這些 工具和軟件的使川并非關(guān)鍵,筆者也不建議讀者花大量時間在建模方法的選擇上。對于大多數(shù)應川來說, e-r圖足以描述實體間的關(guān)系。建模關(guān)鍵是思想而不是工具,軟件只是起到輔助作用,識別實體關(guān)系才是 木階段的重點。除了實體關(guān)系,我們還應該考慮屬性的域(值類型、范圍、約束)(四)實現(xiàn)階段實現(xiàn)

10、階段主要針對選擇的rdbms定義e-r圖對應的表,考慮屬性類型和范用以及約束。(五)物理階段物理階段是一個驗證并調(diào)優(yōu)的階段,是在實際物理設備上部署數(shù)據(jù)庫,并進行測試和調(diào)優(yōu)。三設計原則(-)降低對數(shù)據(jù)庫功能的依賴功能應該由程序?qū)崿F(xiàn),而非db實現(xiàn)。原因在于,如果功能由db實現(xiàn)時,一旦更換的dbms不如之前的系統(tǒng) 強人,不能實現(xiàn)某些功能,這時我們將不得不去修改代碼。所以,為了杜絕此類情況的發(fā)生,功能應該冇 程序?qū)崿F(xiàn),數(shù)據(jù)庫僅僅負責數(shù)據(jù)的存儲,以達到放低的耦合。(二)定義實體關(guān)系的原則當定義一個實體與其他實體z間的關(guān)系時,需要考量如下: 牽涉到的實體識別出關(guān)系所涉及的所有實體。 所有權(quán)考慮一個實體“擁

11、有”另一個實體的情況。 基數(shù)考最一個實體的實例和另一個實體實例關(guān)聯(lián)的數(shù)最。關(guān)系與表數(shù)杲 描述1:1關(guān)系最少需要1張表。 描述l:n關(guān)系最少需要2張表。 描述n:n關(guān)系最少需要3張衣。(三)列意味著唯一的值如果表示坐標(0,0),應該使用兩列表示,而不是將“0,0”放在1個列中。(四)列的順序列的順序?qū)τ诒韥碚f無關(guān)緊耍,但是從習慣上來說,采用“主鍵+外鍵+實體數(shù)據(jù)+非實體數(shù)據(jù)”這樣的順序 對列進行排序顯然能得到比較好的可讀性。(五)定義主鍵和外鍵數(shù)據(jù)表必須定義主鍵和外鍵(如果冇外鍵)。定義主鍵和外鍵不僅是rdbms的耍求,同時也是開發(fā)的要求。 兒乎所有的代碼生成器都需要這些信息來生成常用方法的代

12、碼(包括sql文和引用),所以,定義主鍵和 外鍵在開發(fā)階段是必須的。之所以說在開發(fā)階段是必須的是因為,有不少團隊出于性能考慮會在進行大量 測試后,在保證參照完整性不會出現(xiàn)大的缺陷后,會刪除掉db的所有外鍵,以達到最優(yōu)性能。筆者認為, 在性能沒冇出現(xiàn)問題時應該保留外鍵,而即便性能真的出現(xiàn)問題,也應該對sql文進行優(yōu)化,而非放棄外 鍵約束。(六)選擇鍵1人工鍵與自然鍵人工健一實體的非自然屬性,根據(jù)需要山人強加的,如guid,其對實體毫無意義;自然健實體的自 然屬性,如身份證編號。人工鍵的好處: 鍵值永遠不變 永遠是單列存儲人工鍵的缺點: 因為人工鍵是沒有實際意義的唯一值,所以不能通過人工鍵來避免重

13、復行。筆者建議全部使川人工鍵。原因如下: 在設計階段我們無法預測到代碼真正需要的值,所以干脆放棄猜測鍵,而使用人工鍵。 人工鍵復雜處理實體關(guān)系,而不負責任何屬性描述,這樣的設計使得實體關(guān)系與實體內(nèi)容得到高 度解耦,這樣做的設計思路更加清晰。筆者的另一個建議是一一每張表都需要冇一個對用戶而言冇意義的自然鍵,在特殊悄況下也許找不到這樣 一個項,此時可以使用復合鍵。這個鍵我在程序中并不會使用其作為唯一標識,但是卻可以在對數(shù)據(jù)庫直 接進行查詢時使用。使用人工鍵的另一根弊端,主要源自對査詢性能的考量,因此選擇人工鍵的形式(列的類型)很重要: 自增值類型山于類熨輕巧查詢效率更好,但取值有限。 gu1d查詢

14、效率不如值類型,但是取值無限,且對開發(fā)人員更加親切。2智能健與非智能鍵智能鍵一鍵值包含額外信息,其根據(jù)某種約定好的編碼規(guī)范進行編碼,從鍵值木身可以獲取某些信息; 非智能鍵,單純的無意義鍵值,如自增的數(shù)字或guid。智能鍵是一把雙刃劍,開發(fā)人員偏愛這種包含信息的鍵值,程序盼瑕著其中潛在的數(shù)據(jù);數(shù)據(jù)庫管理員或 者設汁者則討丿犬這種智能鍵,原因也是很顯然的,鋼能鍵對數(shù)據(jù)庫是潛在的風險。前面捉到,數(shù)據(jù)庫設汁 的原則z是不要把具冇獨立意義的值的組合實現(xiàn)到一個單一的列中,應該使用多個獨立的列。數(shù)據(jù)庫設 計者,更希望開發(fā)人員通過拼接多個列來得到豬能鍵,即以復合主鍵的形式給開發(fā)人員使用,而不是將一 個列的值分

15、解后使川。開發(fā)人員應該接受這種數(shù)據(jù)庫設計,但是很多開發(fā)打卻想不明口兩打的優(yōu)略。筆者 認為,使用單一列實現(xiàn)智能鍵存在這樣一個風險,就是我們可能在設計階段無法預期到編碼規(guī)則可能會在 后期發(fā)生變化。比如,構(gòu)成鋼能鍵的局部鍵的值用完而引起規(guī)則變化或者長度變化,這種編碼規(guī)則的變化 對于程序的冇效性驗證與猶能鍵解析是破壞性的,這是系統(tǒng)運維人員最不希望看到的。所以筆者建議如果 需耍徹能鍵,請在業(yè)務邏輯層封裝(使用只讀屬性),不要再持久化層實現(xiàn),以避免上述問題。(七)是否允許null關(guān)于null我們需要了解它的幾個特性: 任何值和null拼接后都為nullo 所冇與null進行的數(shù)學操作都返回nullo 引入

16、nui丄后,邏輯不易處理。那么我們是否應該允許列為空呢?筆者認為這個問題的答案受到我們的開發(fā)語言的影響。以c#為例,因為 引入了可空類型來處理數(shù)據(jù)庫值類型為null的情形,所以是否允許為空對開發(fā)者來說意義并不大。們有一 點必須注懣,就是驗證非空必須要在程序集進行處理,而不該依賴于dbms的非空約束,必須確保完整數(shù)據(jù) (所冇必須的屬性均被賦值)到達db (所謂的“安全區(qū)”,我們必須定義在多層系統(tǒng)中那些區(qū)域得到的數(shù) 據(jù)是安全而純凈的)。(八)屬性切割一種錯課想法是,屬性與列是1: 1的關(guān)系。對于開發(fā)者,我們公開屬性而非字段。舉個例子來說,對于實 體“員工”有“名字”這一屬性,“名字”可以再被分解為

17、“姓”和“名”,對于開發(fā)人員來說,顯然第 二種數(shù)據(jù)結(jié)構(gòu)更受青睞(“姓”和“名”作為兩個字段)。所以,在設計時我們也應該根據(jù)需要考慮是否 切割屈性。(九)規(guī)范化一范式 當筆者還在大學時,范式是學習關(guān)系型數(shù)據(jù)庫時最頭疼的問題。我想也許會有讀者仍然不理解范式的價值, 簡單來說一一范式將幫助我們來保證數(shù)據(jù)的有效性和完整性。規(guī)范化的目的如下: 消滅重復數(shù)據(jù)。 避免編寫不必要的,用來使重復數(shù)據(jù)同步的代碼。 保持表的瘦身,以及減從一張表中讀取數(shù)據(jù)時需耍進行的讀操作數(shù)量。 最大化聚集索引的使川,從而可以進行更優(yōu)化的數(shù)據(jù)訪問和聯(lián)結(jié)。 減少毎張表使用的索引數(shù)量,因為維護索引的成木很高。規(guī)范化旨在一一挑出復雜的實體

18、,從中抽取出簡單的實體。這個過程一直持續(xù)下去,直到數(shù)擁庫中每個表 都只代表一件事物,并且表中每個描述的都是這件事物為止。1規(guī)范化實體和屬性(去除冗余)1nf:每個屬性都只應表示一個單一的值,而非多個值。需要考慮兒點: 屬性是原子性的需耍考慮熟悉是否分解的足夠徹底,使得每個屈性都表示一個單一的值。(和“(三)列意味著唯-的值”描述的原則相同。)分解原則為一當你需要分開處理每個部分時 才分解值,并且分解到足夠用就行。(即使當前不需耍徹底分解丿屈性,也應該考慮未來可能的需 求變更。) 屬性的所冇實例必須包含相同數(shù)屋的值實體冇固定數(shù)暈的屬性(表冇固定數(shù)屋的列)。設計實體 時,要讓每個屬性只有固定數(shù)量的

19、值與其相關(guān)聯(lián)。 實體中出現(xiàn)的所有實體類型都必須不同當前設計不符合1nf的“臭味”: 包含分隔符類字符的字符串數(shù)據(jù)。 名字尾端冇數(shù)字的屬性。 沒有定義鍵或鍵定義不好的表。2屬性間的關(guān)系(去除冗余)2nf-實體必須符合1nf,每個屬性描述的東西都必須針對整個鍵(町以理解為oop中類世屬性的內(nèi)聚性)。當前設計不符合2nf的“臭味”: 重復的鍵屈性名字前綴(設計z外的數(shù)據(jù)兀余)表明這些值可能描述了某些額外的實體。 有重復的數(shù)擁組(設計z外的數(shù)擁兀余)這標志著屈性間有函數(shù)依賴型。 沒有外鍵的復合主鍵這標志著鍵中的鍵值可能標識了多種取物,而不是一種取物。3nf-實體必須符合2nf,非鍵屬性不能描述其他非鍵

20、屬性。(與2阡不同,3nf處理的是非鍵屬性和非鍵屬 性z間的關(guān)系,而不是和鍵屬性z間的關(guān)系。當前設計不符合3nf的“臭味”: 多個屬性有同樣的前綴。 重復的數(shù)據(jù)組。 匯總的數(shù)抓,所引用的數(shù)據(jù)在一個完全不同的實體中。(有些人傾向于使用視圖,我更傾向于使 用對彖集合,即由程序來完成。)bcnf-實體滿足第一范式,所有屬性完全依賴于某個鍵,如果所有的判定都是一個鍵,則實體滿足bcnf。(bcnf簡單地擴展了以前的范式,它說的是:一個實體可能冇若干個鍵,所冇屬性都必須依賴于這些鍵中 的一個,也可以理解為“每個鍵必須唯-標識實體,每個非鍵熟悉必須描述實體?!?去除實體組合鍵中的冗余4nf-實體必須滿足b

21、cmf,在一個屈性與實體的鍵z間,多值依賴(一條記錄在幣個衣的唯一性由多個值紐 合起來決定的)不能超過一個。當前設計不符合4nf的“臭味”: 三元關(guān)系(實體:實體:實體)。 潛伏的多值屬性。(如多個手機號。) 臨時數(shù)據(jù)或歷史值。(需要將歷史數(shù)據(jù)的主體捉出,否則將存在大量冗余。)4盡量將所有關(guān)系分解為二元關(guān)系5嚇-實體必須滿足4nf,當分解的信息無損的時候,確保所冇關(guān)系都被分解為二元關(guān)系。5nf保證在第四范式中存在的任何可以分解為實體的三元關(guān)系都被分解。冇的三元關(guān)系可以在不丟失信息 的前提下被分解為二元關(guān)系,當分解為兩個二元關(guān)系的過程耍丟失信息時,關(guān)系被宣稱為處于第四范式中。 所以,第五范式建議

22、是,最好把現(xiàn)有的三元關(guān)系都分解為3個二元關(guān)系。需耍注意的是,規(guī)范化的結(jié)果可能是更多的表,更復雜的杳詢。因此,處理到何種程度,取決丁性能和數(shù) 據(jù)架構(gòu)的多方考量。建議規(guī)范化到第四范式,原因是5nf的判斷太過隱晦。例如:表x (老師,學生,課 程)是一個三元關(guān)系,可以分解為表a (老師,學生),表b (學生,課程),表c (老師,課程)。表x 表示某個老師是上某個學生的某個課程的老師;表a表示老師教學生;表b表示學生上課;表c表示老師 教課。單獨看是無法發(fā)現(xiàn)問題的,但是從數(shù)據(jù)出發(fā),衣2衣a+衣b+表c"并不一定成立,叩不能通過連接 構(gòu)建分解前的數(shù)據(jù)。因為可能有多種組合,喪失了表x反饋出的業(yè)

23、務規(guī)則。這種現(xiàn)彖,容易在設汁階段被 忽略,但好在在開放階段會被顯現(xiàn),而且并不經(jīng)常發(fā)生。推薦做法: 盡可能地遵守上述規(guī)范化原則。 所有屬性描述的都應該是體現(xiàn)被建模實體的木質(zhì)的內(nèi)容。 至少必須有一個鍵,它唯一地標識和描述了所建實體的本質(zhì)。 主鍵要謹慎選擇。 在邏輯階段能做多少規(guī)范化就做多少(性能不是邏輯階段考慮的范疇)。(十)選擇數(shù)據(jù)類型(ms sql 2008)ms sql的常用類型:精確數(shù)字不會發(fā)生精度損失bit tinyint smallint int bigint decimal近似數(shù)字對于極值可能發(fā)生粘度 損失float(n) real日期和時間date time smalldatetimc datetime datctimc2 datetimeoffset二進制數(shù)據(jù)bingary(n) varbinary(n) varbinary (max)字符(串)數(shù)據(jù)char(n) varchar (n) varchar (max) nchar (n) nvarchar (n) n varchtir (max)存儲任意數(shù)據(jù)sql_varici nt時間戳timestampguiduniqucidcntifierxml不要試圖使用該類盤規(guī) 避1nfxml空間數(shù)據(jù)g

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論