新聞中心
隨著互聯(lián)網(wǎng)的飛速發(fā)展,數(shù)據(jù)庫已成為企業(yè)信息化建設(shè)中不可缺少的一部分。設(shè)計(jì)好的數(shù)據(jù)庫可以幫助企業(yè)高效地存儲(chǔ)和管理數(shù)據(jù),并提高數(shù)據(jù)的利用率。在實(shí)際應(yīng)用中,數(shù)據(jù)庫設(shè)計(jì)技巧的好壞往往直接影響數(shù)據(jù)操作的效率。本文將從以下角度探討的方法和實(shí)踐。

一、數(shù)據(jù)庫設(shè)計(jì)原則
數(shù)據(jù)庫設(shè)計(jì)是一個(gè)非常關(guān)鍵的環(huán)節(jié),其設(shè)計(jì)好壞決定了數(shù)據(jù)庫的性能與穩(wěn)定性。為了提高數(shù)據(jù)操作效率,設(shè)計(jì)數(shù)據(jù)庫時(shí)需要遵守以下原則:
1.合理分析需求。在數(shù)據(jù)庫設(shè)計(jì)前,需要對(duì)企業(yè)的業(yè)務(wù)需求進(jìn)行梳理和分析,明確數(shù)據(jù)表之間的關(guān)系以及數(shù)據(jù)的存儲(chǔ)方式,從而選擇合適的數(shù)據(jù)庫模型和數(shù)據(jù)結(jié)構(gòu)。
2.保證數(shù)據(jù)完整性。作為數(shù)據(jù)庫的核心特性,數(shù)據(jù)完整性是確保數(shù)據(jù)的正確性和有效性,避免數(shù)據(jù)庫出現(xiàn)臟數(shù)據(jù)和重復(fù)數(shù)據(jù)的重要保障。在設(shè)計(jì)數(shù)據(jù)庫時(shí)需要合理設(shè)置數(shù)據(jù)類型、約束和規(guī)則,以保證數(shù)據(jù)的完整性和一致性。
3.優(yōu)化查詢性能。數(shù)據(jù)庫查詢是最為頻繁的操作,因此需要通過索引和分區(qū)等手段來優(yōu)化查詢性能。同時(shí),也需要在設(shè)計(jì)時(shí)考慮后期數(shù)據(jù)增長的情況,避免出現(xiàn)單表數(shù)據(jù)過大而影響查詢效率的情況。
4.創(chuàng)新數(shù)據(jù)庫設(shè)計(jì)。合理借鑒優(yōu)秀的數(shù)據(jù)庫設(shè)計(jì)方案,結(jié)合企業(yè)實(shí)際情況,采用新型數(shù)據(jù)結(jié)構(gòu)、算法和設(shè)計(jì)思路等方式,創(chuàng)新數(shù)據(jù)庫設(shè)計(jì),提高數(shù)據(jù)庫的性能和可擴(kuò)展性。
二、創(chuàng)新數(shù)據(jù)庫設(shè)計(jì)技巧
1.采用適當(dāng)?shù)拇鎯?chǔ)引擎
在設(shè)計(jì)數(shù)據(jù)庫時(shí),存儲(chǔ)引擎的選擇是非常關(guān)鍵的一步。目前主流的數(shù)據(jù)庫引擎包括InnoDB、MyISAM等,需要根據(jù)業(yè)務(wù)需求的不同來選擇適合自己的存儲(chǔ)引擎。比如,InnoDB適合高并發(fā)和事務(wù)處理,而MyISAM適合讀頻繁的應(yīng)用。在數(shù)據(jù)操作時(shí),適當(dāng)調(diào)整存儲(chǔ)引擎的參數(shù)和優(yōu)化數(shù)據(jù)庫結(jié)構(gòu),也可以顯著提高數(shù)據(jù)庫的性能。
2.采用分區(qū)表
對(duì)于單表數(shù)據(jù)過大的情況,可以采用分區(qū)表的方式來提高查詢效率。分區(qū)表是將一個(gè)大表劃分成小表,每個(gè)小表擁有獨(dú)立的存儲(chǔ)空間和索引。這樣可以有效地分散查詢請(qǐng)求,提升查詢效率。同時(shí),也可以根據(jù)數(shù)據(jù)訪問模式來選擇分區(qū)方式,比如按時(shí)間、按地域等方式進(jìn)行分區(qū)。
3.采用非關(guān)系型數(shù)據(jù)庫
傳統(tǒng)的關(guān)系型數(shù)據(jù)庫存在許多缺點(diǎn),比如數(shù)據(jù)結(jié)構(gòu)散亂、靈活性不足、缺乏高并發(fā)和大數(shù)據(jù)處理等問題。而采用非關(guān)系型數(shù)據(jù)庫(NoSQL)則可以有效地解決這些問題。非關(guān)系型數(shù)據(jù)庫采用了鍵值對(duì)、文檔、圖形等方式來存儲(chǔ)數(shù)據(jù),具有高擴(kuò)展性、高可用性和高并發(fā)性等優(yōu)點(diǎn),適合處理大數(shù)據(jù)和高并發(fā)的應(yīng)用場(chǎng)景。
4.采用云數(shù)據(jù)庫
隨著云計(jì)算的發(fā)展,云數(shù)據(jù)庫也越來越受到企業(yè)的青睞。云數(shù)據(jù)庫具有高可用性、彈性伸縮性和全球性等優(yōu)點(diǎn),可以為企業(yè)提供強(qiáng)大的數(shù)據(jù)存儲(chǔ)和處理能力。同時(shí),也可以借助云數(shù)據(jù)庫提供的工具和服務(wù)來快速搭建和實(shí)現(xiàn)數(shù)據(jù)庫的監(jiān)控、備份、恢復(fù)等操作。
三、實(shí)踐方法
1.設(shè)計(jì)命名規(guī)范
為了方便數(shù)據(jù)的管理和維護(hù),需要在設(shè)計(jì)數(shù)據(jù)庫時(shí)制定命名規(guī)范。命名規(guī)范應(yīng)該依據(jù)表的功能和用途來命名,同時(shí)也要注意不要使用過長、過于復(fù)雜的表名和字段名。在設(shè)計(jì)數(shù)據(jù)庫時(shí),需要制定統(tǒng)一的命名規(guī)范,并嚴(yán)格執(zhí)行。
2.啟用緩存機(jī)制
為了提高數(shù)據(jù)讀取的效率,可以通過啟用緩存機(jī)制來減少數(shù)據(jù)庫的壓力。常見的緩存機(jī)制包括Redis、Memcache等,可以將常用數(shù)據(jù)保存在內(nèi)存中,提高數(shù)據(jù)讀取的速度。同時(shí),也可以通過設(shè)置查詢緩存、對(duì)象緩存等方式來優(yōu)化數(shù)據(jù)操作的效率。
3.合理使用索引
索引是數(shù)據(jù)庫查詢的重要依據(jù)之一,它可以極大地提高數(shù)據(jù)操作的效率。在設(shè)計(jì)數(shù)據(jù)庫時(shí),需要合理設(shè)置索引方式和范圍,同時(shí)也要避免過度索引和無效索引的問題。通過監(jiān)控和調(diào)整索引的使用,可以優(yōu)化數(shù)據(jù)庫的性能和響應(yīng)速度。
4.定期維護(hù)和優(yōu)化
為了確保數(shù)據(jù)庫的穩(wěn)定性和性能,需要定期維護(hù)和優(yōu)化數(shù)據(jù)庫。主要包括清理冗余數(shù)據(jù)、優(yōu)化索引規(guī)則、更新存儲(chǔ)引擎等操作。同時(shí)還需要對(duì)數(shù)據(jù)庫進(jìn)行監(jiān)控和評(píng)估,對(duì)性能下降和異常情況進(jìn)行及時(shí)處理。
綜上所述,,是企業(yè)信息化建設(shè)中不可或缺的一環(huán)。在實(shí)際應(yīng)用中,需要遵循數(shù)據(jù)庫設(shè)計(jì)原則,創(chuàng)新數(shù)據(jù)庫設(shè)計(jì)技巧,采用合適的存儲(chǔ)引擎和分區(qū)方式,選擇適合自己的數(shù)據(jù)庫類型和云數(shù)據(jù)庫,同時(shí)也需要不斷參照更佳實(shí)踐,定期維護(hù)和優(yōu)化數(shù)據(jù)庫,以保證數(shù)據(jù)庫的高效和穩(wěn)定。
相關(guān)問題拓展閱讀:
- 大型數(shù)據(jù)庫的設(shè)計(jì)原則與開發(fā)技巧
- 購物網(wǎng)站數(shù)據(jù)庫設(shè)計(jì)
- 請(qǐng)簡要的敘述一下數(shù)據(jù)庫的主要設(shè)計(jì)過程
大型數(shù)據(jù)庫的設(shè)計(jì)原則與開發(fā)技巧
隨著計(jì)算機(jī)技術(shù)越來越廣泛地應(yīng)用于國民經(jīng)濟(jì)的各個(gè)領(lǐng)域 在計(jì)算機(jī)硬件不斷微型化的同時(shí) 應(yīng)用系統(tǒng)向著復(fù)雜化 大型化的方向發(fā)展 數(shù)據(jù)庫是整個(gè)系統(tǒng)的核心 它的設(shè)計(jì)直接關(guān)系系統(tǒng)執(zhí)行的效率和系統(tǒng)的穩(wěn)定性 因此在軟件系統(tǒng)開發(fā)中 數(shù)據(jù)庫設(shè)計(jì)應(yīng)遵循必要的數(shù)據(jù)庫范式理論 以減少冗余 保證數(shù)據(jù)的完整性與正確性 只有在合適的數(shù)據(jù)庫產(chǎn)品上設(shè)計(jì)出合理的數(shù)據(jù)庫模型 才能降低整個(gè)系統(tǒng)的編程和維護(hù)難度 提高系統(tǒng)的實(shí)際運(yùn)行效率 雖然對(duì)于小項(xiàng)目或中等規(guī)模的項(xiàng)目開發(fā)人員可以很容易地利用范式理論設(shè)計(jì)出一套符合要求的數(shù)據(jù)庫 但對(duì)于一個(gè)包含大型數(shù)據(jù)庫的軟件項(xiàng)目 就必須有一套完整的設(shè)計(jì)原則與技巧
一 成立數(shù)據(jù)小組
大型數(shù)據(jù)庫數(shù)據(jù)元素多 在設(shè)計(jì)上有必要成立專門的數(shù)據(jù)小組 由于數(shù)據(jù)庫設(shè)計(jì)者不一定是使用者 對(duì)系統(tǒng)設(shè)計(jì)中的數(shù)據(jù)元素不可能考慮周全 數(shù)據(jù)庫設(shè)計(jì)出來后 往往難以找到所需的庫表 因此數(shù)據(jù)小組更好由熟悉業(yè)務(wù)的項(xiàng)目骨干組成
數(shù)據(jù)小組的職能并非是設(shè)計(jì)數(shù)據(jù)庫 而是通過需求分析 在參考其他相似系顫腔統(tǒng)的基礎(chǔ)上 提取系統(tǒng)的基本數(shù)據(jù)元素 擔(dān)負(fù)對(duì)數(shù)據(jù)庫的審核 審核內(nèi)容包括審核新的數(shù)據(jù)庫元素是否完全 能否實(shí)現(xiàn)全部業(yè)務(wù)需求 對(duì)舊數(shù)據(jù)庫(如果存在舊系統(tǒng))的分析及數(shù)據(jù)轉(zhuǎn)換 數(shù)據(jù)庫設(shè)計(jì)的審核 控制及必要調(diào)整
二 設(shè)計(jì)原沖遲則
規(guī)范命名 所有的庫名 表名 域名必須遵循統(tǒng)一的命名規(guī)則 并進(jìn)行必要說明 以方便設(shè)計(jì) 維護(hù) 查詢
控制字段的引用 在設(shè)計(jì)時(shí) 可以選擇適當(dāng)?shù)臄?shù)據(jù)庫設(shè)計(jì)管理工具 以方便開發(fā)人員的分布式設(shè)計(jì)和數(shù)據(jù)小組的集中審核管理 采用統(tǒng)一的命名規(guī)則 如果設(shè)計(jì)的字段已經(jīng)存在 可直接引用 否則 應(yīng)重新設(shè)計(jì)
庫表重復(fù)控制 在設(shè)計(jì)過程中 如果發(fā)現(xiàn)大部分字段都已存在 開發(fā)人員應(yīng)懷疑所設(shè)計(jì)的庫表是否已存在 通過對(duì)字段所在庫表及相應(yīng)設(shè)計(jì)人員的查詢 可以確認(rèn)庫表是否確實(shí)重復(fù)
并發(fā)控制 設(shè)計(jì)中應(yīng)進(jìn)行并發(fā)控制 即對(duì)于同一個(gè)庫表 在茄判衫同一時(shí)間只有一個(gè)人有控制權(quán) 其他人只能進(jìn)行查詢
必要的討論 數(shù)據(jù)庫設(shè)計(jì)完成后 數(shù)據(jù)小組應(yīng)與相關(guān)人員進(jìn)行討論 通過討論來熟悉數(shù)據(jù)庫 從而對(duì)設(shè)計(jì)中存在的問題進(jìn)行控制或從中獲取數(shù)據(jù)庫設(shè)計(jì)的必要信息
數(shù)據(jù)小組的審核 庫表的定版 修改最終都要通過數(shù)據(jù)小組的審核 以保證符合必要的要求
頭文件處理 每次數(shù)據(jù)修改后 數(shù)據(jù)小組要對(duì)相應(yīng)的頭文件進(jìn)行修改(可由管理軟件自動(dòng)完成) 并通知相關(guān)的開發(fā)人員 以便進(jìn)行相應(yīng)的程序修改
三 設(shè)計(jì)技巧
分類拆分?jǐn)?shù)據(jù)量大的表 對(duì)于經(jīng)常使用的表(如某些參數(shù)表或代碼對(duì)照表) 由于其使用頻率很高 要盡量減少表中的記錄數(shù)量 例如 銀行的戶主賬表原來設(shè)計(jì)成一張表 雖然可以方便程序的設(shè)計(jì)與維護(hù) 但經(jīng)過分析發(fā)現(xiàn) 由于數(shù)據(jù)量太大 會(huì)影響數(shù)據(jù)的迅速定位 如果將戶主賬表分別設(shè)計(jì)為活期戶主賬 定期戶主賬及對(duì)公戶主賬等 則可以大大提高查詢效率
索引設(shè)計(jì) 對(duì)于大的數(shù)據(jù)庫表 合理的索引能夠提高整個(gè)數(shù)據(jù)庫的操作效率 在索引設(shè)計(jì)中 索引字段應(yīng)挑選重復(fù)值較少的字段 在對(duì)建有復(fù)合索引的字段進(jìn)行檢索時(shí) 應(yīng)注意按照復(fù)合索引字段建立的順序進(jìn)行 例如 如果對(duì)一個(gè) 萬多條記錄的流水表以日期和流水號(hào)為序建立復(fù)合索引 由于在該表中日期的重復(fù)值接近整個(gè)表的記錄數(shù) 用流水號(hào)進(jìn)行查詢所用的時(shí)間接近 秒 而如果以流水號(hào)為索引字段建立索引進(jìn)行相同的查詢 所用時(shí)間不到 秒 因此在大型數(shù)據(jù)庫設(shè)計(jì)中 只有進(jìn)行合理的索引字段選擇 才能有效提高整個(gè)數(shù)據(jù)庫的操作效率
數(shù)據(jù)操作的優(yōu)化 在大型數(shù)據(jù)庫中 如何提高數(shù)據(jù)操作效率值得關(guān)注 例如 每在數(shù)據(jù)庫流水表中增加一筆業(yè)務(wù) 就必須從流水控制表中取出流水號(hào) 并將其流水號(hào)的數(shù)值加一 正常情況下 單筆操作的反應(yīng)速度尚屬正常 但當(dāng)用它進(jìn)行批量業(yè)務(wù)處理時(shí) 速度會(huì)明顯減慢 經(jīng)過分析發(fā)現(xiàn) 每次對(duì)流水控制表中的流水號(hào)數(shù)值加一時(shí)都要鎖定該表 而該表卻是整個(gè)系統(tǒng)操作的核心 有可能在操作時(shí)被其他進(jìn)程鎖定 因而使整個(gè)事務(wù)操作速度變慢 對(duì)這一問題的解決的辦法是 根據(jù)批量業(yè)務(wù)的總筆數(shù)批量申請(qǐng)流水號(hào) 并對(duì)流水控制表進(jìn)行一次更新 即可提高批量業(yè)務(wù)處理的速度 另一個(gè)例子是對(duì)插表的優(yōu)化 對(duì)于大批量的業(yè)務(wù)處理 如果在插入數(shù)據(jù)庫表時(shí)用普通的Insert語句 速度會(huì)很慢 其原因在于 每次插表都要進(jìn)行一次I/O操作 花費(fèi)較長的時(shí)間 改進(jìn)后 可以用Put語句等緩沖區(qū)形式等滿頁后再進(jìn)行I/O操作 從而提高效率 對(duì)大的數(shù)據(jù)庫表進(jìn)行刪除時(shí) 一般會(huì)直接用Delete語句 這個(gè)語句雖然可以進(jìn)行小表操作 但對(duì)大表卻會(huì)因帶來大事務(wù)而導(dǎo)致刪除速度很慢甚至失敗 解決的方法是去掉事務(wù) 但更有效的辦法是先進(jìn)行Drop操作再進(jìn)行重建
數(shù)據(jù)庫參數(shù)的調(diào)整 數(shù)據(jù)庫參數(shù)的調(diào)整是一個(gè)經(jīng)驗(yàn)不斷積累的過程 應(yīng)由有經(jīng)驗(yàn)的系統(tǒng)管理員完成 以Informix數(shù)據(jù)庫為例 記錄鎖的數(shù)目太少會(huì)造成鎖表的失敗 邏輯日志的文件數(shù)目太少會(huì)造成插入大表失敗等 這些問題都應(yīng)根據(jù)實(shí)際情況進(jìn)行必要的調(diào)整
必要的工具 在整個(gè)數(shù)據(jù)庫的開發(fā)與設(shè)計(jì)過程中 可以先開發(fā)一些小的應(yīng)用工具 如自動(dòng)生成庫表的頭文件 插入數(shù)據(jù)的初始化 數(shù)據(jù)插入的函數(shù)封裝 錯(cuò)誤跟蹤或自動(dòng)顯示等 以此提高數(shù)據(jù)庫的設(shè)計(jì)與開發(fā)效率
避免長事務(wù) 對(duì)單個(gè)大表的刪除或插入操作會(huì)帶來大事務(wù) 解決的辦法是對(duì)參數(shù)進(jìn)行調(diào)整 也可以在插入時(shí)對(duì)文件進(jìn)行分割 對(duì)于一個(gè)由一系列小事務(wù)順序操作共同構(gòu)成的長事務(wù)(如銀行交易系統(tǒng)的日終交易) 可以由一系列操作完成整個(gè)事務(wù) 但其缺點(diǎn)是有可能因整個(gè)事務(wù)太大而使不能完成 或者 由于偶然的意外而使事務(wù)重做所需的時(shí)間太長 較好的解決方法是 把整個(gè)事務(wù)分解成幾個(gè)較小的事務(wù) 再由應(yīng)用程序控制整個(gè)系統(tǒng)的流程 這樣 如果其中某個(gè)事務(wù)不成功 則只需重做該事務(wù) 因而既可節(jié)約時(shí)間 又可避免長事務(wù)
適當(dāng)超前 計(jì)算機(jī)技術(shù)發(fā)展日新月異 數(shù)據(jù)庫的設(shè)計(jì)必須具有一定前瞻性 不但要滿足當(dāng)前的應(yīng)用要求 還要考慮未來的業(yè)務(wù)發(fā)展 同時(shí)必須有利于擴(kuò)展或增加應(yīng)用系統(tǒng)的處理功能
lishixinzhi/Article/program/SQL/202311/16498
購物網(wǎng)站數(shù)據(jù)庫設(shè)計(jì)
要這樣,這樣你會(huì)有無數(shù)多的表,而且以后新的一個(gè)產(chǎn)品時(shí)候非常麻煩,如果要屬于新的類別,而且還會(huì)因?yàn)楸苊鈹?shù)據(jù)庫太復(fù)雜而使得許多不同類的產(chǎn)品歸在一個(gè)類。而且你的程序很麻煩,要肢升棚為每個(gè)類編寫不同程序,因?yàn)閿?shù)據(jù)表名不同。
應(yīng)該用下面的辦法,主要使用四個(gè)表存儲(chǔ)所有類別的商品:
之一、類別名稱表,字段有
類別ID,類別名稱
1電腦
2洗衣機(jī)
第二、類別屬性表,字段有:
類別ID,屬性ID,屬性名稱
11CPU
12內(nèi)存
13屏幕尺寸
21容量
22類型
第三、商品名稱表,字歷則段有:
商品ID,類別ID
第四、商品屬性表,字段有:
商品ID,屬性ID,屬性值
11P4
12128M
13CRT14
21P4
22512M
23LCD19
319公斤
32滾筒
418公斤
42波輪
上面定義了四個(gè)商品,商品ID為1~4,分別是128M、512M內(nèi)存的電腦,和9公斤滾筒、8公斤的波輪洗衣機(jī)。
這樣定義的數(shù)據(jù)庫結(jié)構(gòu),可以包含任何商品,一般不會(huì)笑旅改變,那么程序也就無需改變,定義新的產(chǎn)品、或者修改現(xiàn)有商品只需要在程序界面有操作員點(diǎn)點(diǎn)鼠標(biāo)。
請(qǐng)簡要的敘述一下數(shù)據(jù)庫的主要設(shè)計(jì)過程
一、數(shù)據(jù)庫設(shè)計(jì)過程
數(shù)據(jù)庫技術(shù)是信息資源管理最有效的手段。
數(shù)據(jù)庫設(shè)計(jì)是指:對(duì)于一個(gè)給定的應(yīng)用環(huán)境,構(gòu)造更優(yōu)的數(shù)據(jù)庫模式,建立數(shù)據(jù)庫及其應(yīng)用系統(tǒng),有效存儲(chǔ)數(shù)據(jù),滿足用戶信息要求和處理要求。
數(shù)據(jù)庫設(shè)計(jì)的各階段:
A、需求分析階段:綜合各個(gè)用戶的應(yīng)用需求(現(xiàn)實(shí)世界的需求)。
B、在概念設(shè)計(jì)階段:形成獨(dú)立于機(jī)器和各DBMS產(chǎn)品的概念模式(信息世界模型),用E-R圖來描述。
C、在邏輯設(shè)計(jì)階段:將E-R圖轉(zhuǎn)換成具體的數(shù)據(jù)庫產(chǎn)品支持的數(shù)據(jù)模型,如關(guān)系模型,形成數(shù)據(jù)庫邏輯模式。然后根據(jù)用戶處理的要求,安全性的考慮,在基本表的基礎(chǔ)上再建立必要的視圖(VIEW)形成數(shù)據(jù)的外模式。
D、在物理設(shè)計(jì)階段:根據(jù)DBMS特點(diǎn)和處理的需要,進(jìn)行物理存儲(chǔ)安排,設(shè)計(jì)索引,形成數(shù)據(jù)庫內(nèi)模式。
1. 需求分析階段
需求收集和分析,結(jié)果得到數(shù)據(jù)字典描述的數(shù)據(jù)需求(和數(shù)據(jù)流圖描述的處理需求)。
需求分析的重點(diǎn):調(diào)查、收集與分析用戶在數(shù)據(jù)管理中的信息要求、處理要求、安全性與完整性要求。
需求分析的方法:調(diào)查組織機(jī)構(gòu)情況、各部門的業(yè)務(wù)活動(dòng)情況、協(xié)助用戶明確對(duì)新系統(tǒng)的各種要求、確定新系統(tǒng)的邊界。
常用的調(diào)查方法有: 跟班作業(yè)、開調(diào)查會(huì)、請(qǐng)專人介紹、詢問、設(shè)計(jì)調(diào)查表請(qǐng)用戶填寫、查閱記錄。
分析和表達(dá)用戶需求的方法主要包括自頂向下和自底向上兩類方法。自頂向下的結(jié)構(gòu)化分析方法(Structured Analysis,簡稱SA方法)從最上層的系統(tǒng)組織機(jī)構(gòu)入手,采用逐層分解的方式分析系統(tǒng),并把每一層用數(shù)據(jù)流圖和數(shù)據(jù)字典描述。
數(shù)據(jù)流圖表達(dá)了數(shù)據(jù)和處理過程的關(guān)系。系統(tǒng)中的數(shù)據(jù)則借助數(shù)據(jù)字典(Data Dictionary,簡稱DD)來描述。
2. 概念結(jié)構(gòu)設(shè)計(jì)階段
通過對(duì)用戶碰粗需求進(jìn)行綜合、歸納與抽象,形成一個(gè)獨(dú)立于具體DBMS的概薯陸念模型,可以用E-R圖表示。
概念模型用于信息世界的建模。概念模型不依賴于某一個(gè)DBMS支持的數(shù)據(jù)模型。概念模型可以轉(zhuǎn)換為計(jì)算機(jī)上某一DBMS支持的特定數(shù)據(jù)模型。
概念模型特點(diǎn):
(1) 具有較強(qiáng)的語義表達(dá)能力,能夠方便、直接地表達(dá)應(yīng)用中的各種語義知識(shí)。
(2) 應(yīng)該簡單、清晰、易于用戶理解,是用戶與數(shù)據(jù)庫設(shè)計(jì)人員之間進(jìn)行交流的語言。
概念模型設(shè)計(jì)的一種常用方法為IDEF1X方法,它就是把實(shí)體-聯(lián)系方法應(yīng)用到語義數(shù)據(jù)模型中的一種語義模型化技術(shù),用于建立系統(tǒng)信息模型。
作者: 小靈, 出處:論壇, 責(zé)任編輯: 李書琴,:17
本文詳細(xì)解析了數(shù)據(jù)庫設(shè)計(jì)過程、設(shè)計(jì)技巧以及總結(jié)了數(shù)據(jù)庫命名規(guī)范……
2.1 第零步——初始化工程
這個(gè)階段的任務(wù)是從目的描述和范圍描述開始,確定建模目標(biāo),開發(fā)建模計(jì)劃,組織建模隊(duì)伍,收集源材料,制定約束和規(guī)范。收集源材料是這階段的重點(diǎn)。通過調(diào)查和觀察結(jié)果,業(yè)務(wù)流程,原有系統(tǒng)的輸入輸出,各種報(bào)表,收集原始數(shù)據(jù),形成了基本數(shù)據(jù)資笑手鎮(zhèn)料表。
2.2 之一步——定義實(shí)體
實(shí)體集成員都有一個(gè)共同的特征和屬性集,可以從收集的源材料——基本數(shù)據(jù)資料表中直接或間接標(biāo)識(shí)出大部分實(shí)體。根據(jù)源材料名字表中表示物的術(shù)語以及具有 “代碼”結(jié)尾的術(shù)語,如客戶代碼、代理商代碼、產(chǎn)品代碼等將其名詞部分代表的實(shí)體標(biāo)識(shí)出來,從而初步找出潛在的實(shí)體,形成初步實(shí)體表。
2.3 第二步——定義聯(lián)系
IDEF1X模型中只允許二元聯(lián)系,n元聯(lián)系必須定義為n個(gè)二元聯(lián)系。根據(jù)實(shí)際的業(yè)務(wù)需求和規(guī)則,使用實(shí)體聯(lián)系矩陣來標(biāo)識(shí)實(shí)體間的二元關(guān)系,然后根據(jù)實(shí)際情況確定出連接關(guān)系的勢(shì)、關(guān)系名和說明,確定關(guān)系類型,是標(biāo)識(shí)關(guān)系、非標(biāo)識(shí)關(guān)系(強(qiáng)制的或可選的)還是非確定關(guān)系、分類關(guān)系。如果子實(shí)體的每個(gè)實(shí)例都需要通過和父實(shí)體的關(guān)系來標(biāo)識(shí),則為標(biāo)識(shí)關(guān)系,否則為非標(biāo)識(shí)關(guān)系。非標(biāo)識(shí)關(guān)系中,如果每個(gè)子實(shí)體的實(shí)例都與而且只與一個(gè)父實(shí)體關(guān)聯(lián),則為強(qiáng)制的,否則為非強(qiáng)制的。如果父實(shí)體與子實(shí)體代表的是同一現(xiàn)實(shí)對(duì)象,那么它們?yōu)榉诸愱P(guān)系。
2.4 第三步——定義碼
通過引入交叉實(shí)體除去上一階段產(chǎn)生的非確定關(guān)系,然后從非交叉實(shí)體和獨(dú)立實(shí)體開始標(biāo)識(shí)侯選碼屬性,以便唯一識(shí)別每個(gè)實(shí)體的實(shí)例,再從侯選碼中確定主碼。為了確定主碼和關(guān)系的有效性,通過非空規(guī)則和非多值規(guī)則來保證,即一個(gè)實(shí)體實(shí)例的一個(gè)屬性不能是空值,也不能在同一個(gè)時(shí)刻有一個(gè)以上的值。找出誤認(rèn)的確定關(guān)系,將實(shí)體進(jìn)一步分解,最后構(gòu)造出IDEF1X模型的鍵基視圖(KB圖)。
2.5 第四步——定義屬性
從源數(shù)據(jù)表中抽取說明性的名詞開發(fā)出屬性表,確定屬性的所有者。定義非主碼屬性,檢查屬性的非空及非多值規(guī)則。此外,還要檢查完全依賴函數(shù)規(guī)則和非傳遞依賴規(guī)則,保證一個(gè)非主碼屬性必須依賴于主碼、整個(gè)主碼、僅僅是主碼。以此得到了至少符合關(guān)系理論第三范式的改進(jìn)的IDEF1X模型的全屬性視圖。
2.6 第五步——定義其他對(duì)象和規(guī)則
定義屬性的數(shù)據(jù)類型、長度、精度、非空、缺省值、約束規(guī)則等。定義觸發(fā)器、存儲(chǔ)過程、視圖、角色、同義詞、序列等對(duì)象信息。
3. 邏輯結(jié)構(gòu)設(shè)計(jì)階段
將概念結(jié)構(gòu)轉(zhuǎn)換為某個(gè)DBMS所支持的數(shù)據(jù)模型(例如關(guān)系模型),并對(duì)其進(jìn)行優(yōu)化。設(shè)計(jì)邏輯結(jié)構(gòu)應(yīng)該選擇最適于描述與表達(dá)相應(yīng)概念結(jié)構(gòu)的數(shù)據(jù)模型,然后選擇最合適的DBMS。
將E-R圖轉(zhuǎn)換為關(guān)系模型實(shí)際上就是要將實(shí)體、實(shí)體的屬性和實(shí)體之間的聯(lián)系轉(zhuǎn)化為關(guān)系模式,這種轉(zhuǎn)換一般遵循如下原則:一個(gè)實(shí)體型轉(zhuǎn)換為一個(gè)關(guān)系模式。實(shí)體的屬性就是關(guān)系的屬性。實(shí)體的碼就是關(guān)系的碼。
數(shù)據(jù)模型的優(yōu)化,確定數(shù)據(jù)依賴,消除冗余的聯(lián)系,確定各關(guān)系模式分別屬于第幾范式。確定是否要對(duì)它們進(jìn)行合并或分解。一般來說將關(guān)系分解為3NF的標(biāo)準(zhǔn),即:
表內(nèi)的每一個(gè)值都只能被表達(dá)一次。
表內(nèi)的每一行都應(yīng)該被唯一的標(biāo)識(shí)(有唯一鍵)。
表內(nèi)不應(yīng)該存儲(chǔ)依賴于其他鍵的非鍵信息。
作者: 小靈, 出處:論壇, 責(zé)任編輯: 李書琴,:17
本文詳細(xì)解析了數(shù)據(jù)庫設(shè)計(jì)過程、設(shè)計(jì)技巧以及總結(jié)了數(shù)據(jù)庫命名規(guī)范……
4. 數(shù)據(jù)庫物理設(shè)計(jì)階段
為邏輯數(shù)據(jù)模型選取一個(gè)最適合應(yīng)用環(huán)境的物理結(jié)構(gòu)(包括存儲(chǔ)結(jié)構(gòu)和存取方法)。根據(jù)DBMS特點(diǎn)和處理的需要,進(jìn)行物理存儲(chǔ)安排,設(shè)計(jì)索引,形成數(shù)據(jù)庫內(nèi)模式。
5. 數(shù)據(jù)庫實(shí)施階段
運(yùn)用DBMS提供的數(shù)據(jù)語言(例如SQL)及其宿主語言(例如C),根據(jù)邏輯設(shè)計(jì)和物理設(shè)計(jì)的結(jié)果建立數(shù)據(jù)庫,編制與調(diào)試應(yīng)用程序,組織數(shù)據(jù)入庫,并進(jìn)行試運(yùn)行。 數(shù)據(jù)庫實(shí)施主要包括以下工作:用DDL定義數(shù)據(jù)庫結(jié)構(gòu)、組織數(shù)據(jù)入庫 、編制與調(diào)試應(yīng)用程序、數(shù)據(jù)庫試運(yùn)行 ,(Data Definition Language(DDL數(shù)據(jù)定義語言)用作開新數(shù)據(jù)表、設(shè)定字段、刪除數(shù)據(jù)表、刪除字段,管理所有有關(guān)數(shù)據(jù)庫結(jié)構(gòu)的東西)
●Create (新增有關(guān)數(shù)據(jù)庫結(jié)構(gòu)的東西,屬DDL)
●Drop (刪除有關(guān)數(shù)據(jù)庫結(jié)構(gòu)的東西,屬DDL)
●Alter (更改結(jié)構(gòu),屬DDL)
6. 數(shù)據(jù)庫運(yùn)行和維護(hù)階段
在數(shù)據(jù)庫系統(tǒng)運(yùn)行過程中必須不斷地對(duì)其進(jìn)行評(píng)價(jià)、調(diào)整與修改。內(nèi)容包括:數(shù)據(jù)庫的轉(zhuǎn)儲(chǔ)和恢復(fù)、數(shù)據(jù)庫的安全性、完整性控制、數(shù)據(jù)庫性能的監(jiān)督、分析和改進(jìn)、數(shù)據(jù)庫的重組織和重構(gòu)造。
7. 建模工具的使用
為加快數(shù)據(jù)庫設(shè)計(jì)速度,目前有很多數(shù)據(jù)庫輔助工具(CASE工具),如Rational公司的Rational Rose,CA公司的Erwin和Bpwin,Sybase公司的PowerDesigner以及Oracle公司的oracle Designer等。
ERwin主要用來建立數(shù)據(jù)庫的概念模型和物理模型。它能用圖形化的方式,描述出實(shí)體、聯(lián)系及實(shí)體的屬性。ERwin支持IDEF1X方法。通過使用 ERwin建模工具自動(dòng)生成、更改和分析IDEF1X模型,不僅能得到優(yōu)秀的業(yè)務(wù)功能和數(shù)據(jù)需求模型,而且可以實(shí)現(xiàn)從IDEF1X模型到數(shù)據(jù)庫物理設(shè)計(jì)的轉(zhuǎn)變。ERwin工具繪制的模型對(duì)應(yīng)于邏輯模型和物理模型兩種。在邏輯模型中,IDEF1X工具箱可以方便地用圖形化的方式構(gòu)建和繪制實(shí)體聯(lián)系及實(shí)體的屬性。在物理模型中,ERwin可以定義對(duì)應(yīng)的表、列,并可針對(duì)各種數(shù)據(jù)庫管理系統(tǒng)自動(dòng)轉(zhuǎn)換為適當(dāng)?shù)念愋汀?/p>
設(shè)計(jì)人員可根據(jù)需要選用相應(yīng)的數(shù)據(jù)庫設(shè)計(jì)建模工具。例如需求分析完成之后,設(shè)計(jì)人員可以使用Erwin畫ER圖,將ER圖轉(zhuǎn)換為關(guān)系數(shù)據(jù)模型,生成數(shù)據(jù)庫結(jié)構(gòu);畫數(shù)據(jù)流圖,生成應(yīng)用程序。
二、數(shù)據(jù)庫設(shè)計(jì)技巧
1. 設(shè)計(jì)數(shù)據(jù)庫之前(需求分析階段)
1) 理解客戶需求,包括用戶未來需求變化。
2) 了解企業(yè)業(yè)務(wù)類型,可以在開發(fā)階段節(jié)約大量的時(shí)間。
3) 重視輸入(要記錄的數(shù)據(jù))、輸出(報(bào)表、查詢、視圖)。
4) 創(chuàng)建數(shù)據(jù)字典和ER 圖表
數(shù)據(jù)字典(Data Dictionary,簡稱DD)是各類數(shù)據(jù)描述的,是關(guān)于數(shù)據(jù)庫中數(shù)據(jù)的描述,即元數(shù)據(jù),不是數(shù)據(jù)本身。(至少應(yīng)該包含每個(gè)字段的數(shù)據(jù)類型和在每個(gè)表內(nèi)的主外鍵)。
數(shù)據(jù)項(xiàng)描述: 數(shù)據(jù)項(xiàng)名,數(shù)據(jù)項(xiàng)含義說明,別名,數(shù)據(jù)類型,長度,取值范圍,取值含義,與其他數(shù)據(jù)項(xiàng)的邏輯關(guān)系
數(shù)據(jù)結(jié)構(gòu)描述: 數(shù)據(jù)結(jié)構(gòu)名,含義說明,組成:
數(shù)據(jù)流描述: 數(shù)據(jù)流名,說明,數(shù)據(jù)流來源,數(shù)據(jù)流去向, 組成:,平均流量,高峰期流量
數(shù)據(jù)存儲(chǔ)描述: 數(shù)據(jù)存儲(chǔ)名,說明,編號(hào),流入的數(shù)據(jù)流,流出的數(shù)據(jù)流,組成:,數(shù)據(jù)量,存取方式
處理過程描述: 處理過程名,說明,輸入:,輸出:,處理:
ER 圖表和數(shù)據(jù)字典可以讓任何了解數(shù)據(jù)庫的人都明確如何從數(shù)據(jù)庫中獲得數(shù)據(jù)。ER圖對(duì)表明表之間關(guān)系很有用,而數(shù)據(jù)字典則說明了每個(gè)字段的用途以及任何可能存在的別名。對(duì)SQL 表達(dá)式的文檔化來說這是完全必要的。
5) 定義標(biāo)準(zhǔn)的對(duì)象命名規(guī)范
數(shù)據(jù)庫各種對(duì)象的命名必須規(guī)范。
作者: 小靈, 出處:論壇, 責(zé)任編輯: 李書琴,:17
本文詳細(xì)解析了數(shù)據(jù)庫設(shè)計(jì)過程、設(shè)計(jì)技巧以及總結(jié)了數(shù)據(jù)庫命名規(guī)范……
2. 表和字段的設(shè)計(jì)(數(shù)據(jù)庫邏輯設(shè)計(jì))
表設(shè)計(jì)原則
1) 標(biāo)準(zhǔn)化和規(guī)范化
數(shù)據(jù)的標(biāo)準(zhǔn)化有助于消除數(shù)據(jù)庫中的數(shù)據(jù)冗余。標(biāo)準(zhǔn)化有好幾種形式,但Third Normal Form(3NF)通常被認(rèn)為在性能、擴(kuò)展性和數(shù)據(jù)完整性方面達(dá)到了更好平衡。簡單來說,遵守3NF 標(biāo)準(zhǔn)的數(shù)據(jù)庫的表設(shè)計(jì)原則是:“One Fact in One Place”即某個(gè)表只包括其本身基本的屬性,當(dāng)不是它們本身所具有的屬性時(shí)需進(jìn)行分解。表之間的關(guān)系通過外鍵相連接。它具有以下特點(diǎn):有一組表專門存放通過鍵連接起來的關(guān)聯(lián)數(shù)據(jù)。
2) 數(shù)據(jù)驅(qū)動(dòng)
采用數(shù)據(jù)驅(qū)動(dòng)而非硬編碼的方式,許多策略變更和維護(hù)都會(huì)方便得多,大大增強(qiáng)系統(tǒng)的靈活性和擴(kuò)展性。
舉例,假如用戶界面要訪問外部數(shù)據(jù)源(文件、XML 文檔、其他數(shù)據(jù)庫等),不妨把相應(yīng)的連接和路徑信息存儲(chǔ)在用戶界面支持的表里。如果用戶界面執(zhí)行工作流之類的任務(wù)(發(fā)送郵件、打印信箋、修改記錄狀態(tài)等),那么產(chǎn)生工作流的數(shù)據(jù)也可以存放在數(shù)據(jù)庫里。角色權(quán)限管理也可以通過數(shù)據(jù)驅(qū)動(dòng)來完成。事實(shí)上,如果過程是數(shù)據(jù)驅(qū)動(dòng)的,你就可以把相當(dāng)大的責(zé)任推給用戶,由用戶來維護(hù)自己的工作流過程。
3) 考慮各種變化
在設(shè)計(jì)數(shù)據(jù)庫的時(shí)候考慮到哪些數(shù)據(jù)字段將來可能會(huì)發(fā)生變更。
4) 表名、報(bào)表名和查詢名的命名規(guī)范
(采用前綴命名)檢查表名、報(bào)表名和查詢名之間的命名規(guī)范。你可能會(huì)很快就被這些不同的數(shù)據(jù)庫要素的名稱搞糊涂了。你可以統(tǒng)一地命名這些數(shù)據(jù)庫的不同組成部分,至少你應(yīng)該在這些對(duì)象名字的開頭用 Table、Query 或者 Report 等前綴加以區(qū)別。如果采用了 Microsoft Access,你可以用 qry、rpt、tbl 和 mod 等符號(hào)來標(biāo)識(shí)對(duì)象(比如 tbl_Employees)。用 sp_company 標(biāo)識(shí)存儲(chǔ)過程,用 udf_ (或者類似的標(biāo)記)標(biāo)識(shí)自定義編寫的函數(shù)。
字段設(shè)計(jì)原則:
1) 每個(gè)表中都應(yīng)該添加的3 個(gè)有用的字段。
dRecordCreationDate,在SQL Server 下默認(rèn)為GETDATE()
sRecordCreator,在SQL Server 下默認(rèn)為NOT NULL DEFAULT USER
nRecordVersion,記錄的版本標(biāo)記;有助于準(zhǔn)確說明記錄中出現(xiàn)null 數(shù)據(jù)或者丟失數(shù)據(jù)的原因
時(shí)效性數(shù)據(jù)應(yīng)包括“最近更新日期/時(shí)間”字段。時(shí)間標(biāo)記對(duì)查找數(shù)據(jù)問題的原因、按日期重新處理/重載數(shù)據(jù)和清除舊數(shù)據(jù)特別有用。
2) 對(duì)地址和采用多個(gè)字段
描述街道地址就短短一行記錄是不夠的。Address_Line1、Address_Line2 和Address_Line3 可以提供更大的靈活性。還有,號(hào)碼和郵件地址更好擁有自己的數(shù)據(jù)表,其間具有自身的類型和標(biāo)記類別。
3) 表內(nèi)的列的命名規(guī)則(采用前綴/后綴命名)、采用有意義的字段名
對(duì)列名應(yīng)該采用標(biāo)準(zhǔn)的前綴和后綴。如鍵是數(shù)字類型:用 _N 后綴;字符類型:_C 后綴;日期類型:_D 后綴。再如,假如你的表里有好多“money”字段,你不妨給每個(gè)列增加一個(gè) _M 后綴。
作者: 小靈, 出處:論壇, 責(zé)任編輯: 李書琴,:17
本文詳細(xì)解析了數(shù)據(jù)庫設(shè)計(jì)過程、設(shè)計(jì)技巧以及總結(jié)了數(shù)據(jù)庫命名規(guī)范……
假設(shè)有兩個(gè)表:
Customer 和 Order。Customer 表的前綴是 cu_,所以該表內(nèi)的子段名如下:cu_name_id、cu_surname、cu_initials 和cu_address 等。Order 表的前綴是 or_,所以子段名是:
or_order_id、or_cust_name_id、or_quantity 和 or_description 等。
這樣從數(shù)據(jù)庫中選出全部數(shù)據(jù)的 SQL 語句可以寫成如下所示:
Select * From Customer, Order Where cu_surname = “MYNAME” ;
and cu_name_id = or_cust_name_id and or_quantity = 1
在沒有這些前綴的情況下則寫成這個(gè)樣子(用別名來區(qū)分):
Select * From Customer, Order Where Customer.surname = “MYNAME” ;
and Customer.name_id = Order.cust_name_id and Order.quantity = 1
第 1 個(gè) SQL 語句沒少鍵入多少字符。但如果查詢涉及到 5 個(gè)表乃至更多的列你就知道這個(gè)技巧多有用了。
5) 選擇數(shù)字類型和文本類型的長度應(yīng)盡量充足
假設(shè)客戶ID 為10 位數(shù)長。那你應(yīng)該把數(shù)據(jù)庫表字段的長度設(shè)為12 或者13 個(gè)字符長。但這額外占據(jù)的空間卻無需將來重構(gòu)整個(gè)數(shù)據(jù)庫就可以實(shí)現(xiàn)數(shù)據(jù)庫規(guī)模的增長了。
6) 增加刪除標(biāo)記字段
在表中包含一個(gè)“刪除標(biāo)記”字段,這樣就可以把行標(biāo)記為刪除。在關(guān)系數(shù)據(jù)庫里不要單獨(dú)刪除某一行;更好采用清除數(shù)據(jù)程序而且要仔細(xì)維護(hù)索引整體性。
7) 提防大小寫混用的對(duì)象名和特殊字符
采用全部大寫而且包含下劃符的名字具有更好的可讀性(CUSTOMER_DATA),絕對(duì)不要在對(duì)象名的字符之間留空格。
8) 小心保留詞
要保證你的字段名沒有和保留詞、數(shù)據(jù)庫系統(tǒng)或者常用訪問方法沖突,比如,用 DESC 作為說明字段名。后果可想而知!DESC 是 DESCENDING 縮寫后的保留詞。表里的一個(gè) SELECT * 語句倒是能用,但得到的卻是一大堆毫無用處的信息。
9) 保持字段名和類型的一致性
在命名字段并為其指定數(shù)據(jù)類型的時(shí)候一定要保證一致性。假如字段在表1中叫做“agreement_number”,就別在表2里把名字改成 “ref1”。假如數(shù)據(jù)類型在表1里是整數(shù),那在表2里可就別變成字符型了。當(dāng)然在表1(ABC)有處鍵ID,則為了可讀性,在表2做關(guān)聯(lián)時(shí)可以命名為 ABC_ID。
10) 避免使用觸發(fā)器
觸發(fā)器的功能通??梢杂闷渌绞綄?shí)現(xiàn)。在調(diào)試程序時(shí)觸發(fā)器可能成為干擾。假如你確實(shí)需要采用觸發(fā)器,你更好集中對(duì)它文檔化。
作者: 小靈, 出處:論壇, 責(zé)任編輯: 李書琴,:17
本文詳細(xì)解析了數(shù)據(jù)庫設(shè)計(jì)過程、設(shè)計(jì)技巧以及總結(jié)了數(shù)據(jù)庫命名規(guī)范……
3. 選擇鍵和索引(數(shù)據(jù)庫邏輯設(shè)計(jì))
參考:《SQL優(yōu)化-索引》一文
4. 數(shù)據(jù)完整性設(shè)計(jì)(數(shù)據(jù)庫邏輯設(shè)計(jì))
1) 完整性實(shí)現(xiàn)機(jī)制:
實(shí)體完整性:主鍵
參照完整性:
父表中刪除數(shù)據(jù):級(jí)聯(lián)刪除;受限刪除;置空值
父表中插入數(shù)據(jù):受限插入;遞歸插入
父表中更新數(shù)據(jù):級(jí)聯(lián)更新;受限更新;置空值
DBMS對(duì)參照完整性可以有兩種方法實(shí)現(xiàn):外鍵實(shí)現(xiàn)機(jī)制(約束規(guī)則)和觸發(fā)器實(shí)現(xiàn)機(jī)制用戶定義完整性:
NOT NULL;CHECK;觸發(fā)器
2) 用約束而非商務(wù)規(guī)則強(qiáng)制數(shù)據(jù)完整性
采用數(shù)據(jù)庫系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)的完整性。這不但包括通過標(biāo)準(zhǔn)化實(shí)現(xiàn)的完整性而且還包括數(shù)據(jù)的功能性。不要依賴于商務(wù)層保證數(shù)據(jù)完整性;它不能保證表之間(外鍵) 的完整性所以不能強(qiáng)加于其他完整性規(guī)則之上。如果你在數(shù)據(jù)層確實(shí)采用了約束,你要保證有辦法把更新不能通過約束檢查的原因采用用戶理解的語言通知用戶界面。
3) 強(qiáng)制指示完整性
在有害數(shù)據(jù)進(jìn)入數(shù)據(jù)庫之前將其剔除。激活數(shù)據(jù)庫系統(tǒng)的指示完整性特性。這樣可以保持?jǐn)?shù)據(jù)的清潔而能迫使開發(fā)人員投入更多的時(shí)間處理錯(cuò)誤條件。
4) 使用查找控制數(shù)據(jù)完整性
控制數(shù)據(jù)完整性的更佳方式就是限制用戶的選擇。只要有可能都應(yīng)該提供給用戶一個(gè)清晰的價(jià)值列表供其選擇。這樣將減少鍵入代碼的錯(cuò)誤和誤解同時(shí)提供數(shù)據(jù)的一致性。某些公共數(shù)據(jù)特別適合查找:國家代碼、狀態(tài)代碼等。
5) 采用視圖
為了在數(shù)據(jù)庫和應(yīng)用程序代碼之間提供另一層抽象,可以為應(yīng)用程序建立專門的視圖而不必非要應(yīng)用程序直接訪問數(shù)據(jù)表。這樣做還等于在處理數(shù)據(jù)庫變更時(shí)給你提供了更多的自由。
6) 分布式數(shù)據(jù)系統(tǒng)
對(duì)分布式系統(tǒng)而言,在你決定是否在各個(gè)站點(diǎn)復(fù)制所有數(shù)據(jù)還是把數(shù)據(jù)保存在一個(gè)地方之前應(yīng)該估計(jì)一下未來 5 年或者 10 年的數(shù)據(jù)量。當(dāng)你把數(shù)據(jù)傳送到其他站點(diǎn)的時(shí)候,更好在數(shù)據(jù)庫字段中設(shè)置一些標(biāo)記,在目的站點(diǎn)收到你的數(shù)據(jù)之后更新你的標(biāo)記。為了進(jìn)行這種數(shù)據(jù)傳輸,請(qǐng)寫下你自己的批處理或者調(diào)度程序以特定時(shí)間間隔運(yùn)行而不要讓用戶在每天的工作后傳輸數(shù)據(jù)。本地拷貝你的維護(hù)數(shù)據(jù),比如計(jì)算常數(shù)和利息率等,設(shè)置版本號(hào)保證數(shù)據(jù)在每個(gè)站點(diǎn)都完全一致。
7) 關(guān)系
如果兩個(gè)實(shí)體之間存在多對(duì)一關(guān)系,而且還有可能轉(zhuǎn)化為多對(duì)多關(guān)系,那么你更好一開始就設(shè)置成多對(duì)多關(guān)系。從現(xiàn)有的多對(duì)一關(guān)系轉(zhuǎn)變?yōu)槎鄬?duì)多關(guān)系比一開始就是多對(duì)多關(guān)系要難得多。
8) 給數(shù)據(jù)保有和恢復(fù)制定計(jì)劃
考慮數(shù)據(jù)保存策略并包含在設(shè)計(jì)過程中,預(yù)先設(shè)計(jì)你的數(shù)據(jù)恢復(fù)過程。采用可以發(fā)布給用戶/開發(fā)人員的數(shù)據(jù)字典實(shí)現(xiàn)方便的數(shù)據(jù)識(shí)別同時(shí)保證對(duì)數(shù)據(jù)源文檔化。編寫在線更新來“更新查詢”供以后萬一數(shù)據(jù)丟失可以重新處理更新。
9) 用存儲(chǔ)過程讓系統(tǒng)做重活
提供一整套常規(guī)的存儲(chǔ)過程來訪問各組以便加快速度和簡化客戶程序代碼的開發(fā)。數(shù)據(jù)庫不只是一個(gè)存放數(shù)據(jù)的地方,它也是簡化編碼之地。
本文詳細(xì)解析了數(shù)據(jù)庫設(shè)計(jì)過程、設(shè)計(jì)技巧以及總結(jié)了數(shù)據(jù)庫命名規(guī)范……
5. 其他設(shè)計(jì)技巧
1) 避免使用觸發(fā)器
觸發(fā)器的功能通??梢杂闷渌绞綄?shí)現(xiàn)。在調(diào)試程序時(shí)觸發(fā)器可能成為干擾。假如你確實(shí)需要采用觸發(fā)器,你更好集中對(duì)它文檔化。
2) 使用常用英語(或者其他任何語言)而不要使用編碼
在創(chuàng)建下拉菜單、列表、報(bào)表時(shí)更好按照英語名排序。假如需要編碼,可以在編碼旁附上用戶知道的英語。
3) 保存常用信息
讓一個(gè)表專門存放一般數(shù)據(jù)庫信息非常有用。在這個(gè)表里存放數(shù)據(jù)庫當(dāng)前版本、最近檢查/修復(fù)(對(duì)Access)、關(guān)聯(lián)設(shè)計(jì)文檔的名稱、客戶等信息。這樣可以實(shí)現(xiàn)一種簡單機(jī)制跟蹤數(shù)據(jù)庫,當(dāng)客戶抱怨他們的數(shù)據(jù)庫沒有達(dá)到希望的要求而與你聯(lián)系時(shí),這樣做對(duì)非客戶機(jī)/服務(wù)器環(huán)境特別有用。
4) 包含版本機(jī)制
在數(shù)據(jù)庫中引入版本控制機(jī)制來確定使用中的數(shù)據(jù)庫的版本。時(shí)間一長,用戶的需求總是會(huì)改變的。最終可能會(huì)要求修改數(shù)據(jù)庫結(jié)構(gòu)。把版本信息直接存放到數(shù)據(jù)庫中更為方便。
5) 編制文檔
對(duì)所有的快捷方式、命名規(guī)范、限制和函數(shù)都要編制文檔。
采用給表、列、觸發(fā)器等加注釋的 數(shù)據(jù)庫工具。對(duì)開發(fā)、支持和跟蹤修改非常有用。
對(duì)數(shù)據(jù)庫文檔化,或者在數(shù)據(jù)庫自身的內(nèi)部或者單獨(dú)建立文檔。這樣,當(dāng)過了一年多時(shí)間后再回過頭來做第2 個(gè)版本,犯錯(cuò)的機(jī)會(huì)將大大減少。
6) 測(cè)試、測(cè)試、反復(fù)測(cè)試
建立或者修訂數(shù)據(jù)庫之后,必須用用戶新輸入的數(shù)據(jù)測(cè)試數(shù)據(jù)字段。最重要的是,讓用戶進(jìn)行測(cè)試并且同用戶一道保證選擇的數(shù)據(jù)類型滿足商業(yè)要求。測(cè)試需要在把新數(shù)據(jù)庫投入實(shí)際服務(wù)之前完成。
7) 檢查設(shè)計(jì)
在開發(fā)期間檢查數(shù)據(jù)庫設(shè)計(jì)的常用技術(shù)是通過其所支持的應(yīng)用程序原型檢查數(shù)據(jù)庫。換句話說,針對(duì)每一種最終表達(dá)數(shù)據(jù)的原型應(yīng)用,保證你檢查了數(shù)據(jù)模型并且查看如何取出數(shù)據(jù)。
三、數(shù)據(jù)庫命名規(guī)范
1. 實(shí)體(表)的命名
1) 表以名詞或名詞短語命名,確定表名是采用復(fù)數(shù)還是單數(shù)形式,此外給表的別名定義簡單規(guī)則(比方說,如果表名是一個(gè)單詞,別名就取單詞的前4 個(gè)字母;如果表名是兩個(gè)單詞,就各取兩個(gè)單詞的前兩個(gè)字母組成4 個(gè)字母長的別名;如果表的名字由3 個(gè)單詞組成,從頭兩個(gè)單詞中各取一個(gè)然后從最后一個(gè)單詞中再取出兩個(gè)字母,結(jié)果還是組成4 字母長的別名,其余依次類推)
對(duì)工作用表來說,表名可以加上前綴WORK_ 后面附上采用該表的應(yīng)用程序的名字。在命名過程當(dāng)中,根據(jù)語義拼湊縮寫即可。注意:將字段名稱會(huì)統(tǒng)一成大寫或者小寫中的一種,故中間加上下劃線。
作者: 小靈, 出處:論壇, 責(zé)任編輯: 李書琴,:17
本文詳細(xì)解析了數(shù)據(jù)庫設(shè)計(jì)過程、設(shè)計(jì)技巧以及總結(jié)了數(shù)據(jù)庫命名規(guī)范……
舉例:
定義的縮寫 Sales: Sal 銷售;
Order: Ord 訂單;
Detail: Dtl 明細(xì);
則銷售訂單明細(xì)表命名為:Sal_Ord_Dtl;
2) 如果表或者是字段的名稱僅有一個(gè)單詞,那么建議不使用縮寫,而是用完整的單詞。
舉例:
定義的縮寫 Material Ma 物品;
物品表名為:Material, 而不是 Ma.
但是字段物品編碼則是:Ma_ID;而不是Material_ID
3) 所有的存儲(chǔ)值列表的表前面加上前綴Z
目的是將這些值列表類排序在數(shù)據(jù)庫最后。
4) 所有的冗余類的命名(主要是累計(jì)表)前面加上前綴X
冗余類是為了提高數(shù)據(jù)庫效率,非規(guī)范化數(shù)據(jù)庫的時(shí)候加入的字段或者表
5) 關(guān)聯(lián)類通過用下劃線連接兩個(gè)基本類之后,再加前綴R的方式命名,后面按照字母順序羅列兩個(gè)表名或者表名的縮寫。
關(guān)聯(lián)表用于保存多對(duì)多關(guān)系。
如果被關(guān)聯(lián)的表名大于10個(gè)字母,必須將原來的表名的進(jìn)行縮寫。如果沒有其他原因,建議都使用縮寫。
舉例:表Object與自身存在多對(duì)多的關(guān)系,則保存多對(duì)多關(guān)系的表命名為:R_Object;
作者: 小靈, 出處:論壇, 責(zé)任編輯: 李書琴,:17
本文詳細(xì)解析了數(shù)據(jù)庫設(shè)計(jì)過程、設(shè)計(jì)技巧以及總結(jié)了數(shù)據(jù)庫命名規(guī)范……
2. 屬性(列)的命名
1) 采用有意義的列名
表內(nèi)的列要針對(duì)鍵采用一整套設(shè)計(jì)規(guī)則。每一個(gè)表都將有一個(gè)自動(dòng)ID作為主健,邏輯上的主健作為之一組候選主健來定義;
A、如果是數(shù)據(jù)庫自動(dòng)生成的編碼,統(tǒng)一命名為:ID
B、如果是自定義的邏輯上的編碼則用縮寫加“ID”的方法命名,即“XXXX_ID”
C、如果鍵是數(shù)字類型,你可以用_NO 作為后綴;
D、如果是字符類型則可以采用_CODE 后綴
E、對(duì)列名應(yīng)該采用標(biāo)準(zhǔn)的前綴和后綴。
舉例:銷售訂單的編號(hào)字段命名:Sal_Ord_ID;如果還存在一個(gè)數(shù)據(jù)庫生成的自動(dòng)編號(hào),則命名為:ID。
2) 所有的屬性加上有關(guān)類型的后綴
注意,如果還需要其它的后綴,都放在類型后綴之前。
注: 數(shù)據(jù)類型是文本的字段,類型后綴TX可以不寫。有些類型比較明顯的字段,可以不寫類型后綴。
3) 采用前綴命名
給每個(gè)表的列名都采用統(tǒng)一的前綴,那么在編寫SQL表達(dá)式的時(shí)候會(huì)得到大大的簡化。這樣做也確實(shí)有缺點(diǎn),比如破壞了自動(dòng)表連接工具的作用,后者把公共列名同某些數(shù)據(jù)庫聯(lián)系起來。
3. 視圖的命名
1) 視圖以V作為前綴,其他命名規(guī)則和表的命名類似;
2) 命名應(yīng)盡量體現(xiàn)各視圖的功能。
4. 觸發(fā)器的命名(盡量不使用)
觸發(fā)器以TR作為前綴,觸發(fā)器名為相應(yīng)的表名加上后綴,Insert觸發(fā)器加’_I’,Delete觸發(fā)器加’_D’,Update觸發(fā)器加’_U’,如:TR_Customer_I,TR_Customer_D,TR_Customer_U。
5. 存儲(chǔ)過程名
存儲(chǔ)過程應(yīng)以’UP_’開頭,和系統(tǒng)的存儲(chǔ)過程區(qū)分,后續(xù)部分主要以動(dòng)賓形式構(gòu)成,并用下劃線分割各個(gè)組成部分。如增加代理商的帳戶的存儲(chǔ)過程為’UP_Ins_Agent_Account’。
6. 變量名
變量名采用小寫,若屬于詞組形式,用下劃線分隔每個(gè)單詞,如@my_err_no。
7. 命名中其他注意事項(xiàng)
1) 以上命名都不得超過30個(gè)字符的系統(tǒng)限制。變量名的長度限制為29(不包括標(biāo)識(shí)字符@)。
2) 數(shù)據(jù)對(duì)象、變量的命名都采用英文字符,禁止使用中文命名。絕對(duì)不要在對(duì)象名的字符之間留空格。
3) 小心保留詞,要保證你的字段名沒有和保留詞、數(shù)據(jù)庫系統(tǒng)或者常用訪問方法沖突
關(guān)于數(shù)據(jù)庫設(shè)計(jì)新的的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都服務(wù)器托管選創(chuàng)新互聯(lián),先上架開通再付費(fèi)。
創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)-網(wǎng)站建設(shè),軟件開發(fā)老牌服務(wù)商!微信小程序開發(fā),APP開發(fā),網(wǎng)站制作,網(wǎng)站營銷推廣服務(wù)眾多企業(yè)。電話:028-86922220
分享標(biāo)題:創(chuàng)新數(shù)據(jù)庫設(shè)計(jì)技巧,提高數(shù)據(jù)操作效率 (數(shù)據(jù)庫設(shè)計(jì)新的)
地址分享:http://www.5511xx.com/article/dhpgcic.html


咨詢
建站咨詢
