青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-48  評論-259  文章-1  trackbacks-0

簡介

在設計數據庫時,最重要的步驟是要確保數據正確分布到數據庫的表中。使用正確的數據結構,可以極大地簡化應用程序的其他內容(查詢、窗體、報表、代碼等)。正確進行表設計的正式名稱是“數據庫規范化”。

本文簡要介紹數據庫規范化的基本概念和一些需要注意并力求避免的常見問題。

理解您的數據

在設計表之前,應明確您打算如何處理數據,還要了解隨著時間的推移數據會發生什么樣的變化。您所做的假設將會影響最終的設計。

您需要什么樣的數據?

設計應用程序時,關鍵要了解設計的最終結果,以便確保您準備好所有必需的數據并知道其來源。例如,報表的外觀、每個數據的來源以及所需的所有數據是否都存在。對項目損失最大的莫過于在項目后期發現重要報表缺少數據。

知道需要什么樣的數據后,就必須確定數據的來源。數據是否從其他數據源中導入?數據是否需要清理或驗證?用戶是否需要輸入數據?

明確所需數據的類型和來源是數據庫設計的第一步。

您打算如何處理這些數據?

用戶是否需要編輯這些數據?如果需要,應如何顯示數據以便于用戶理解和編輯?有沒有驗證規則和相關的查找表?要求對編輯和刪除保留備份的數據輸入有沒有相關聯的審核問題?需要為用戶顯示哪些摘要信息?是否需要生成導出文件?了解這些信息后,就可以想象字段之間是如何相互關聯的了。

數據之間如何相互關聯?

將數據分組放入相關字段(例如與客戶相關的信息、與發票相關的信息等),每個字段組都代表要建立的表。然后考慮如何將這些表相互關聯。例如,哪些表具有一對多關系(例如,一個客戶可能持有多張發票)?哪些表具有一對一關系(這種情況下,通常會考慮將其組合到一個表中)?

隨著時間的推移數據會發生什么樣的變化?

設計表之后,常常會由于沒有考慮時間的影響而導致以后出現嚴重問題。許多表設計在當時使用時效果非常好,但是,常常會因為用戶修改數據、添加數據以及隨時間的推移而崩潰。開發人員經常會發現需要重新設計表的結構來適應這些變化。表的結構發生變化時,所有相關的內容(查詢、窗體、報表、代碼等)也必須隨之更新。理解并預測數據會隨時間推移發生哪些變化,可以實現更好的設計,減少問題的發生。

學習如何使用查詢

了解如何分析和管理數據同樣很重要。您應該深刻理解查詢的工作原理,理解如何使用查詢在多個表之間鏈接數據,如何使用查詢對數據進行分組和匯總,以及如何在不需要以規范化格式顯示數據時使用交叉表查詢。

好的數據設計的最終目標就是要平衡兩個需要:既要隨著時間的推移有效地存儲數據,又要輕松地檢索和分析數據。理解查詢的功能對正確設計表很有幫助。

數據庫規范化概念

這部分介紹數據庫規范化所涉及的基本概念,而不是對數據庫規范化進行理論性的探討。如何在您的實際情況中應用這些概念可能會隨著應用程序需要的不同而有所變化。這部分的目的是理解這些基本概念、根據實際需要應用它們,并理解偏離這些概念將會出現哪些問題。

將唯一信息存儲在一個地方

大部分數據庫開發人員都理解數據庫規范化的基本概念。理想情況下,您希望將相同的數據存儲在同一個地方,并在需要引用時使用 ID 來進行引用。因此,如果某些信息發生了變化,則可以在一個地方進行更改,而整個程序中的相應信息也會隨之更改。

例如,客戶表會存儲每個客戶的記錄,包括姓名、地址、電話號碼、電子郵件地址以及其他特征信息。客戶表中可能包含唯一的 CustomerID 字段(通常是 Autonumber 字段),這個字段即該表的主鍵字段,其他表使用它來引用該客戶。因此,發票表可以只引用客戶的 ID 值,而不是在每張發票中存儲客戶的所有信息(因為同一個客戶可能會持有多張發票),這樣利用客戶的 ID 值即可從客戶表中查找客戶的詳細信息。使用 Access 中功能強大的窗體(使用組合框和子窗體),可以輕松地完成這項工作。如果需要修改客戶信息(例如新增電話號碼),只需在客戶表中修改,應用程序中引用該信息的任何其他部分都會隨之自動更新。

使用正確規范化的數據庫,通過簡單的編輯即可輕松處理數據隨時間推移而發生的更改。使用未正確規范化的數據庫,通常需要利用編程或查詢來更改多條記錄或多個表。這不僅會增加工作量,還會增加由于未正確執行代碼或查詢而導致數據不一致的可能性。

記錄是免費的,而新字段非常昂貴

理想的數據庫應該只需要隨著時間的推移添加新的記錄,數據庫表應該能夠保存大量記錄。但是,如果您發現需要增加更多字段,則可能會碰到設計問題。

電子表格專家經常會遇到上述問題,因為他們習慣于按照設計電子表格的方式設計數據庫。設計經常隨時間變化的字段(例如,年、季度、產品和銷售人員)需要在將來添加新字段。而正確的設計應該是轉換信息并將隨時間變化的數據放在一個字段內,這樣就可以添加更多記錄。例如,只需創建“年”字段,然后在該字段中輸入各記錄相應的年份值即可,無需為每年創建一個單獨的字段。

增加額外的字段可能會產生問題,因為表結構的變化會對應用程序的其他部分產生影響。在表中添加更多字段時,依賴該表的對象和代碼也需要更新。例如,查詢需要獲取額外的字段,窗體需要顯示這些字段,而報表則需要包含這些字段,等等。但是,如果數據已經規范化,則現有對象會自動檢索新數據,并正確計算或顯示這些數據。查詢功能尤其強大,因為它允許您按“年”字段進行分組,以逐年顯示摘要(不管表中包含哪些年份)。

但是,數據規范化并不意味著不能顯示或使用隨時間而變化或依賴時間的字段。需要瀏覽或顯示這類信息的開發人員通常可以使用交叉表查詢來達到這一目的。如果您不熟悉交叉表查詢,應該學習如何使用它們。雖然它們與表有所不同(尤其是用戶無法編輯交叉表查詢的結果),但它們的確可以用于在數據表中顯示信息(最多可以達到 255 個字段)。如果要在報表中使用它們,則會更加復雜,因為報表需要包含額外的或不斷變化的字段名。這就是為什么大多數報表將數據作為獨立的分組(而不是獨立的列)顯示的原因。對于那些別無選擇的情況,您必須花時間去解決這個問題。希望所有人都能夠理解這種決定會隨著時間的變化對其他資源產生的影響。

這就是為什么增加記錄是免費的(這是數據庫的巨大優勢)而增加字段是如此昂貴的原因。如果數據庫設計正確,則可以適應各種各樣的變化。

了解何時需要復制數據

有時數據需要反規范化,以便保存可能會隨時間變化的信息。

在通過客戶 ID 號將發票鏈接到客戶表的簡單示例中,我們可能需要保留開出發票時的客戶地址(而不是制作發票時的地址,因為客戶信息在這兩個事件之間可能會有所變化)。如果開出發票時未保留客戶地址,而將來又必須更新客戶信息,則可能無法確定發送某些發票的確切地址。這可能會導致非常嚴重的商業問題。當然,有些信息(如客戶的電話號碼)可以不保存。因此,應該有選擇地決定需要復制哪些數據。

需要復制數據的另一個例子是填寫發票的明細項。報價單通常用于挑選客戶訂購的商品。我們可以只存儲報價單 ID,而 ID 指向包含產品說明、價格和其他詳細信息的報價單。但是,產品說明和價格會隨著時間而改變。如果不將數據從報價單復制到明細表中,將來則無法準確地重新打印原始發票。如果您尚未收到付款,問題將非常嚴重。

因此,雖然規范化可以將相同的數據很好地保存在一個地方并能簡化編輯工作,但某些情況下卻不需要這些優勢。如果以后由于歷史原因需要數據的快照,則必須從一開始就在數據庫中設計好。否則,一旦數據被覆蓋就無法再找回。

使用沒有確切含義的字段作為主鍵字段

為了提高效率,每個表都應該有一個主鍵字段。主鍵字段定義了在表中的唯一性,并由索引在其他字段中使用,以提高搜索性能。例如,客戶表可以包含為每個客戶定義唯一編號的 CustomerID 字段。為了便于討論,假定表中包含多個字段,而不僅僅是簡單的單一表查找(例如國家/地區列表)。

一般來說,主鍵字段應具有如下特征:

  • 應該只包含一個字段
    可以將多個字段定義為表的主鍵字段,但最好是使用一個字段。首先,如果需要使用多個字段來定義唯一性,則需要占用更多的空間來存儲主鍵。其次,表中的其他索引還必須使用主鍵字段的組合,這樣所占用的空間比使用一個字段所占用的空間要多。最后,在表中標識記錄需要獲取字段組合。使用一個 CustomerID 字段定義客戶比使用其他字段組合要好得多。 
  • 應該為數字類型
    Access 提供的 AutoNumber 字段類型是一個 Long Integer(長整數),非常適用于主鍵字段。這些值可以自動保證每個記錄的唯一性,同時也支持多用戶數據輸入。 
  • 不會隨時間而改變
    主鍵字段不應該隨時間而改變。一旦標識了主鍵字段,就應該永遠不變(象社會保障號一樣)。更改過的主鍵字段將很難再使用歷史數據,因為其中的鏈接被破壞了。 
  • 應該沒有確切含義
    要確保主鍵字段不會隨時間而更改,它應該沒有確切含義。沒有確切含義的主鍵值在其他數據不完整時也非常有用。例如,您可以指定一個客戶編號,而無需該客戶的完整地址。應用程序的其余部分可以很好地工作,您也可以在檢索記錄時添加信息。如果表中使用了國家/地區字段或其他您沒有的標識字段作為主鍵的一部分,則很可能會導致無法使用應用程序。

鑒于上述原因,我們建議在大部分表中使用 AutoNumber 字段作為主鍵字段。通過使用組合框和隱藏列,可以將字段綁定到 AutoNumber 字段并將其隱藏,使用戶無法看到。

使用引用完整性

對表進行定義并理解各表是如何關聯的之后,請確保添加引用完整性來鞏固各表之間的關系。這樣可以避免錯誤地修改鏈接字段而留下孤立的記錄。Microsoft Jet 數據庫引擎支持復雜的引用完整性,允許用戶進行級聯更新和刪除。一般情況下,不應修改 ID 字段。因此,級聯更新用得較少,但級聯刪除卻非常有用。

例如,如果發票表與訂單表相關聯,其中的一張發票可能有無限多個訂單(明細項),并且每個訂單記錄包含它所鏈接的發票編號,則可以使用級聯刪除操作來刪除發票記錄,并自動刪除所有相應的訂單記錄。這樣可以避免出現沒有相應發票記錄的訂單記錄。

小結

我們希望您能盡快將這些數據庫設計概念應用到您的應用程序設計中,從而最大程度地減少問題,減少未實現此類設計時需要進行的修正。祝您好運。

posted on 2007-06-09 22:31 星夢情緣 閱讀(1207) 評論(3)  編輯 收藏 引用 所屬分類: 關于編程

評論:
# re: 數據庫規范化設計技巧 2007-06-10 21:57 | 黃大仙
好  回復  更多評論
  
# re: 數據庫規范化設計技巧 2007-06-10 21:58 | 黃大仙
好  回復  更多評論
  
# re: 數據庫規范化設計技巧 2007-06-10 22:16 | 星夢情緣
嘿嘿,你是???  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品一区在线观看香蕉| 欧美激情精品久久久久久变态| 久久综合精品一区| 欧美一区二区三区在线看| 亚洲女性喷水在线观看一区| 性亚洲最疯狂xxxx高清| 久久琪琪电影院| 欧美成人国产va精品日本一级| 欧美激情视频一区二区三区在线播放 | aa日韩免费精品视频一| 一区二区三区福利| 欧美中文字幕在线观看| 男女精品网站| 99国产精品国产精品毛片| 亚洲欧美日韩在线不卡| 老司机午夜精品视频在线观看| 欧美日本中文| 国产综合视频在线观看| 99精品国产一区二区青青牛奶| 欧美亚洲视频一区二区| 欧美激情影音先锋| 久久久精品动漫| 欧美极品aⅴ影院| 国产精品激情| 伊人成人开心激情综合网| 99精品热视频只有精品10| 久久精品一区二区三区不卡牛牛| 亚洲成在人线av| 亚洲免费在线播放| 欧美大成色www永久网站婷| 国产免费成人| 亚洲深夜福利| 亚洲激情视频在线| 久久人人97超碰国产公开结果| 国产精品久久一级| 中文av一区二区| 亚洲国产99精品国自产| 欧美尤物巨大精品爽| 国产精品高潮呻吟视频| 亚洲乱亚洲高清| 欧美mv日韩mv国产网站| 欧美一区在线看| 国产精品一区二区三区四区| 一区二区高清在线| 91久久精品一区二区别| 欧美jjzz| 亚洲精品国产无天堂网2021| 欧美二区不卡| 美女视频一区免费观看| 亚洲电影成人| 欧美激情片在线观看| 蜜桃伊人久久| 亚洲国内自拍| 亚洲第一中文字幕| 美女成人午夜| 亚洲乱码国产乱码精品精天堂| 欧美黄污视频| 欧美国产日韩精品| 亚洲作爱视频| 一本久久综合| 国产精品观看| 欧美在线日韩精品| 欧美一二区视频| 国内精品视频666| 免费av成人在线| 蜜臀av性久久久久蜜臀aⅴ四虎 | 欧美伦理视频网站| 99在线观看免费视频精品观看| 最新亚洲一区| 欧美日韩一区高清| 亚洲一区在线视频| 欧美一区中文字幕| 亚洲国产精品一区二区久| 亚洲黄色在线看| 欧美日韩免费在线| 久久九九精品99国产精品| 久久九九99| 国产精品99久久不卡二区| 亚洲免费视频一区二区| 韩国精品久久久999| 国产一区二区av| 日韩天堂在线观看| 一区二区三区高清视频在线观看| 国产精品另类一区| 蜜臀av性久久久久蜜臀aⅴ| 免费久久精品视频| 亚洲一区中文字幕在线观看| 久久不见久久见免费视频1| 亚洲激情国产精品| 亚洲一区成人| 亚洲欧洲在线免费| 亚洲欧美在线aaa| 亚洲九九爱视频| 欧美影院成年免费版| 一区二区三区欧美激情| 久久精品av麻豆的观看方式| 一区二区三区欧美日韩| 久久久综合香蕉尹人综合网| 亚洲天堂网在线观看| 久久免费少妇高潮久久精品99| 亚洲在线视频网站| 欧美成人乱码一区二区三区| 欧美在线www| 欧美日韩国产麻豆| 欧美成人午夜77777| 国产嫩草一区二区三区在线观看| 亚洲成色777777女色窝| 国产一区二区成人| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲成人在线视频网站| 亚洲欧美日韩在线| 亚洲一区二区三区涩| 牛人盗摄一区二区三区视频| 久久久97精品| 国产欧美日韩在线播放| 日韩系列欧美系列| 亚洲大片精品永久免费| 亚洲日本欧美天堂| 欧美日韩一区在线| 国内一区二区在线视频观看| 亚洲人成在线观看| 樱桃视频在线观看一区| 午夜亚洲视频| 午夜精品亚洲| 欧美视频在线免费| 亚洲精品小视频在线观看| 亚洲日本欧美| 欧美黄在线观看| 亚洲激情一区二区三区| 亚洲二区视频在线| 开心色5月久久精品| 欧美成人精品不卡视频在线观看| 黄色一区二区三区| 久久久www免费人成黑人精品 | 亚洲日本中文字幕免费在线不卡| 欧美亚洲系列| 久久久久久久久久久久久女国产乱| 国产精一区二区三区| 亚洲欧美中文日韩在线| 欧美在线亚洲一区| 国内自拍视频一区二区三区| 久久精品国产精品亚洲综合| 美女视频黄 久久| 久久国内精品视频| 国产欧美一区二区三区另类精品 | 国产精品一区二区久久久| 亚洲一二三四区| 欧美在线不卡视频| 国产主播在线一区| 久热成人在线视频| 亚洲欧洲综合另类| 亚洲女人天堂成人av在线| 国产欧美一区二区三区另类精品| 久久国产直播| 亚洲国产精品99久久久久久久久| 艳妇臀荡乳欲伦亚洲一区| 国产精品爽黄69| 久久久91精品国产一区二区三区| 欧美成年人视频网站欧美| 亚洲精品中文字幕在线观看| 欧美视频在线观看免费网址| 欧美一区2区三区4区公司二百| 浪潮色综合久久天堂| 亚洲最新视频在线| 国产性天天综合网| 欧美精品免费观看二区| 亚洲视频久久| 欧美成人69av| 亚洲一级二级| 亚洲国产成人在线播放| 欧美午夜免费电影| 另类av一区二区| 亚洲一级免费视频| 亚洲国产精品ⅴa在线观看 | 亚洲精品中文在线| 久久精品一区二区三区中文字幕| 91久久精品美女| 国产日韩欧美麻豆| 欧美日精品一区视频| 久久久精品日韩欧美| 亚洲一区二区三区久久 | 久久综合中文| 亚洲自拍偷拍网址| 亚洲欧洲一区二区天堂久久| 久久精品国产视频| 亚洲一区二区在线观看视频| 亚洲片国产一区一级在线观看| 国产精品亚洲аv天堂网| 欧美精品一线| 狂野欧美激情性xxxx| 久久成人精品无人区| 一区二区三区福利| 亚洲激情av在线| 免费人成精品欧美精品| 久久精品欧美日韩精品| 亚洲欧美在线一区| 亚洲午夜视频在线| 99这里有精品| 一本久久综合亚洲鲁鲁五月天| 亚洲人成网站777色婷婷|