這一部分介紹了關(guān)系數(shù)據(jù)庫設(shè)計(jì)的基本原則。徹底的數(shù)據(jù)庫設(shè)計(jì)支持有效的開發(fā)過程,對于成功的數(shù)據(jù)庫功能和性能至關(guān)重要。
安裝中提供了Demodata示例數(shù)據(jù)庫,并經(jīng)常在文檔中用于說明數(shù)據(jù)庫概念和技術(shù)。
設(shè)計(jì)階段
一旦您了解了關(guān)系數(shù)據(jù)庫的基本結(jié)構(gòu),就可以開始數(shù)據(jù)庫設(shè)計(jì)過程。設(shè)計(jì)數(shù)據(jù)庫是一個(gè)根據(jù)業(yè)務(wù)要求開發(fā)和完善數(shù)據(jù)庫結(jié)構(gòu)的過程。
數(shù)據(jù)庫設(shè)計(jì)包括以下三個(gè)階段:
1. 概念性數(shù)據(jù)庫設(shè)計(jì)
2. 邏輯性數(shù)據(jù)庫設(shè)計(jì)
3. 物理性數(shù)據(jù)庫設(shè)計(jì)
一、概念性設(shè)計(jì)
數(shù)據(jù)庫設(shè)計(jì)周期中的第一步是為您的業(yè)務(wù)定義數(shù)據(jù)需求。回答這些類型的問題有助于您定義概念性設(shè)計(jì):
• 我的業(yè)務(wù)當(dāng)前使用哪些類型的信息?
• 我的業(yè)務(wù)需要哪些類型的信息?
• 我想從這個(gè)系統(tǒng)中獲得什么樣的信息?
• 我的業(yè)務(wù)運(yùn)行在什么樣的假設(shè)基礎(chǔ)上?
• 我的業(yè)務(wù)有哪些限制?
• 我需要生成什么樣的報(bào)告?
• 我將如何使用這些信息?
• 這個(gè)系統(tǒng)需要什么樣的安全性?
• 哪些信息可能會擴(kuò)展?
確定您的業(yè)務(wù)目標(biāo)并從將使用數(shù)據(jù)庫的不同來源收集信息是一個(gè)重要的過程。有了這些信息,您可以有效地定義您的表格和列。
二、邏輯設(shè)計(jì)
邏輯數(shù)據(jù)庫設(shè)計(jì)幫助您進(jìn)一步定義和評估您的業(yè)務(wù)信息需求。邏輯數(shù)據(jù)庫設(shè)計(jì)涉及描述您需要跟蹤的信息以及這些信息之間的關(guān)系。
一旦您創(chuàng)建了邏輯設(shè)計(jì),您可以與數(shù)據(jù)庫的用戶驗(yàn)證設(shè)計(jì)是否完整和準(zhǔn)確。他們可以確定設(shè)計(jì)是否包含必須跟蹤的所有信息,以及它是否反映了與業(yè)務(wù)規(guī)則一致所必需的關(guān)系。
創(chuàng)建邏輯數(shù)據(jù)庫設(shè)計(jì)包括以下步驟:
1. 根據(jù)您的業(yè)務(wù)要求定義您需要的表格(如在概念性設(shè)計(jì)中確定的)。
2. 確定表格之間的關(guān)系(有關(guān)更多信息,請參見“表格關(guān)系”一節(jié))。
3. 確定每個(gè)表格的內(nèi)容(列)。
4. 將表格標(biāo)準(zhǔn)化至至少第三范式(有關(guān)更多信息,請參見“標(biāo)準(zhǔn)化”一節(jié))。
5. 確定主鍵(有關(guān)更多信息,請參見“鍵”一節(jié))。
6. 確定每列的值。
表格關(guān)系
在關(guān)系數(shù)據(jù)庫中,表格通過共享一個(gè)公共列相互關(guān)聯(lián)。這個(gè)列存在于兩個(gè)或多個(gè)表格中,允許您連接這些表格。有三種類型的表格關(guān)系:一對一、一對多和多對多。
一對一關(guān)系存在于一個(gè)表格的每一行與第二個(gè)表格中的一個(gè)相關(guān)行之間。例如,大學(xué)可能決定將一個(gè)教職員工分配給一個(gè)房間。因此,在特定時(shí)間內(nèi),一個(gè)房間只能分配給一個(gè)講師。大學(xué)還可能決定一個(gè)部門只能有一個(gè)院長。因此,只有一個(gè)人可以成為一個(gè)部門的負(fù)責(zé)人。
一對多關(guān)系存在于一個(gè)表格的每一行與另一個(gè)表格中的多個(gè)相關(guān)行之間。例如,一個(gè)教師可以教授多門課程。
多對多關(guān)系存在于一個(gè)表格的一行與第二個(gè)表格中的多個(gè)相關(guān)行之間。同樣,那些相關(guān)行在第一個(gè)表格中有多行。一個(gè)學(xué)生可以注冊多門課程,而課程可以包含多個(gè)學(xué)生。
標(biāo)準(zhǔn)化
標(biāo)準(zhǔn)化是一種減少冗余并提高數(shù)據(jù)庫穩(wěn)定性的過程。標(biāo)準(zhǔn)化涉及確定特定數(shù)據(jù)屬于哪個(gè)表格以及它與其他數(shù)據(jù)的關(guān)系。您的數(shù)據(jù)庫設(shè)計(jì)將導(dǎo)致以數(shù)據(jù)為驅(qū)動,而不是以流程或應(yīng)用程序?yàn)轵?qū)動的設(shè)計(jì),從而提供更穩(wěn)定的數(shù)據(jù)庫實(shí)現(xiàn)。
當(dāng)您對數(shù)據(jù)庫進(jìn)行標(biāo)準(zhǔn)化時(shí),您可以消除以下列:
• 包含超過一個(gè)非原子值的列。
• 包含重復(fù)或重復(fù)的列。
• 不描述表格的列。
• 包含冗余數(shù)據(jù)的列。
• 可以從其他列派生的列。
第一范式
第一范式中的列具有以下特征:
• 它們只包含一個(gè)原子值。
• 它們不會重復(fù)。
第一范式的第一個(gè)規(guī)則是您必須將重復(fù)的列或包含多個(gè)值的列移至新表格。
標(biāo)準(zhǔn)化到第一范式的表格具有幾個(gè)優(yōu)點(diǎn)。例如,在示例數(shù)據(jù)庫的計(jì)費(fèi)表中,第一范式執(zhí)行以下操作:
• 允許您為每個(gè)學(xué)生創(chuàng)建任意數(shù)量的交易,而無需添加新列。
• 允許您快速查詢和排序交易數(shù)據(jù),因?yàn)槟凰阉饕粋€(gè)列(交易號)。
• 使用磁盤空間更有效,因?yàn)椴淮鎯樟小?/p>
第二范式
當(dāng)表格處于第一范式中并且僅包含提供有關(guān)表格主鍵的信息的列時(shí),該表格位于第二范式中。
為了強(qiáng)制執(zhí)行標(biāo)準(zhǔn)化的第二條規(guī)則,您必須將不依賴于當(dāng)前表格的主鍵的列移動到新表格中。
如果一個(gè)表格包含冗余數(shù)據(jù),那么它會違反第二范式。這可能導(dǎo)致不一致的數(shù)據(jù),從而使您的數(shù)據(jù)庫缺乏完整性。例如,如果一個(gè)學(xué)生更改了她的地址,那么您必須更新所有現(xiàn)有行以反映新地址。任何帶有舊地址的行都會導(dǎo)致不一致的數(shù)據(jù)。
為解決這些差異,識別出在添加交易時(shí)保持不變的數(shù)據(jù)。像“學(xué)生姓名”或“街道”這樣的列不屬于交易,并且不依賴于主鍵“學(xué)生ID”,因此將此信息存儲在“學(xué)生”表格中,而不是交易表格中。
標(biāo)準(zhǔn)化到第二范式的表格也具有幾個(gè)優(yōu)點(diǎn)。例如,在示例數(shù)據(jù)庫的計(jì)費(fèi)表中,第二范式允許您執(zhí)行以下操作:
• 僅在一行中更新學(xué)生信息。
• 刪除學(xué)生交易而不消除必要的學(xué)生信息。
• 使用磁盤空間更有效,因?yàn)椴淮鎯χ貜?fù)或冗余數(shù)據(jù)。
第三范式
當(dāng)一個(gè)表格只包含獨(dú)立列時(shí),該表格處于第三范式中。
標(biāo)準(zhǔn)化的第三條規(guī)則是您必須刪除可以從現(xiàn)有列派生的列。例如,對于一個(gè)學(xué)生,如果您已經(jīng)有了出生日期列,那么您不必包含年齡列,因?yàn)槟梢詮某錾掌谟?jì)算年齡。
處于第三范式的表格只包含必要的列,因此它使用磁盤空間更有效,因?yàn)椴淮鎯Σ槐匾臄?shù)據(jù)。
總之,第一、第二和第三范式的規(guī)則規(guī)定每個(gè)列值必須完整地是主鍵的事實(shí),除此之外沒有其他事實(shí)。
鍵
ODBC鍵是表格的外鍵完整性(RI)約束所定義的列或一組列。換句話說,鍵或鍵的組合充當(dāng)行數(shù)據(jù)的標(biāo)識符。
有關(guān)引用完整性和鍵的更多信息,請參閱高級操作指南。
三、物理設(shè)計(jì)
物理數(shù)據(jù)庫設(shè)計(jì)是邏輯設(shè)計(jì)的細(xì)化;它將邏輯設(shè)計(jì)映射到關(guān)系數(shù)據(jù)庫管理系統(tǒng)。在這個(gè)階段,您要檢查用戶如何訪問數(shù)據(jù)庫。數(shù)據(jù)庫設(shè)計(jì)周期的這一步涉及確定以下類型的信息:
• 您通常將使用的數(shù)據(jù)。
• 需要為數(shù)據(jù)訪問創(chuàng)建索引的列。
• 需要靈活性或增長空間的區(qū)域。
• 是否通過去標(biāo)準(zhǔn)化數(shù)據(jù)庫來提高性能。(要去標(biāo)準(zhǔn)化您的數(shù)據(jù)庫,您需要重新引入冗余以滿足性能要求。)有關(guān)更多信息,請參見標(biāo)準(zhǔn)化。
如果你對此還有疑問,或者有更多關(guān)于學(xué)業(yè)輔導(dǎo)方面需求的話,可以添加微信號:hmkt131聯(lián)系海馬課堂的Joye老師哦。