當前位置:首頁 » 操作系統 » 資料庫架構設計

資料庫架構設計

發布時間: 2022-05-25 15:08:29

① 概念資料庫設計的主要任務是什麼應該完成哪些工作

資料庫設計可以分為概念結構設計、邏輯結構設計和物理結構設計三個階段。
(1)概念結構設計。這是資料庫設計的第一個階段,在管理信息系統的分析階段,已經得到了系統的數據流程圖和數據字典,現在要結合數據規范化的理論,用一種數據模型將用戶的數據需求明確地表示出來。
概念數據模型是面向問題的模型,反映了用戶的現實工作環境,是與資料庫的具體實現技術無關的。建立系統概念數據模型的過程叫做概念結構設計。
(2)邏輯結構設計。根據已經建立的概念數據模型,以及所採用的某個資料庫管理系統軟體的數據模型特性,按照一定的轉換規則,把概念模型轉換為這個資料庫管理系統所能夠接受的邏輯數據模型。不同的資料庫管理系統提供了不同的邏輯數據模型,如層次模型、網狀模型、關系模型等。
(3)物理結構設計。為一個確定的邏輯數據模型選擇一個最適合應用要求的物理結構的過程,就叫做資料庫的物理結構設計。資料庫在物理設備上的存儲結構和存取方法稱為資料庫的物理數據模型。
資料庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,它產生於距今六十多年前,隨著信息技術和市場的發展,特別是二十世紀九十年代以後,數據管理不再僅僅是存儲和管理數據,而轉變成用戶所需要的各種數據管理的方式。資料庫有很多種類型,從最簡單的存儲有各種數據的表格到能夠進行海量數據存儲的大型資料庫系統都在各個方面得到了廣泛的應用。
在信息化社會,充分有效地管理和利用各類信息資源,是進行科學研究和決策管理的前提條件。資料庫技術是管理信息系統、辦公自動化系統、決策支持系統等各類信息系統的核心部分,是進行科學研究和決策管理的重要技術手段。

② 怎樣的架構設計才是真正的數據倉庫架構

一直想整理一下這塊內容,既然是漫談,就想起什麼說什麼吧。我一直是在互聯網行業,就以互聯網行業來說。
先大概列一下互聯網行業數據倉庫、數據平台的用途:

  • 整合公司所有業務數據,建立統一的數據中心;

  • 提供各種報表,有給高層的,有給各個業務的;

  • 為網站運營提供運營上的數據支持,就是通過數據,讓運營及時了解網站和產品的運營效果;

  • 為各個業務提供線上或線下的數據支持,成為公司統一的數據交換與提供平台;

  • 分析用戶行為數據,通過數據挖掘來降低投入成本,提高投入效果;比如廣告定向精準投放、用戶個性化推薦等;

  • 開發數據產品,直接或間接為公司盈利;

  • 建設開放數據平台,開放公司數據;

  • 。。。。。。


  • 上面列出的內容看上去和傳統行業數據倉庫用途差不多,並且都要求數據倉庫/數據平台有很好的穩定性、可靠性;但在互聯網行業,除了數據量大之外,越來越多的業務要求時效性,甚至很多是要求實時的 ,另外,互聯網行業的業務變化非常快,不可能像傳統行業一樣,可以使用自頂向下的方法建立數據倉庫,一勞永逸,它要求新的業務很快能融入數據倉庫中來,老的下線的業務,能很方便的從現有的數據倉庫中下線;

  • 其實,互聯網行業的數據倉庫就是所謂的敏捷數據倉庫,不但要求能快速的響應數據,也要求能快速的響應業務;

  • 建設敏捷數據倉庫,除了對架構技術上的要求之外,還有一個很重要的方面,就是數據建模,如果一上來就想著建立一套能兼容所有數據和業務的數據模型,那就又回到傳統數據倉庫的建設上了,很難滿足對業務變化的快速響應。應對這種情況,一般是先將核心的持久化的業務進行深度建模(比如:基於網站日誌建立的網站統計分析模型和用戶瀏覽軌跡模型;基於公司核心用戶數據建立的用戶模型),其它的業務一般都採用維度+寬表的方式來建立數據模型。這塊是後話。

  • 整體架構下面的圖是我們目前使用的數據平台架構圖,其實大多公司應該都差不多:

  • 邏輯上,一般都有數據採集層、數據存儲與分析層、數據共享層、數據應用層。可能叫法有所不同,本質上的角色都大同小異。

  • 我們從下往上看:

  • 數據採集數據採集層的任務就是把數據從各種數據源中採集和存儲到數據存儲上,期間有可能會做一些簡單的清洗。


  • 數據源的種類比較多:

  • 網站日誌:


  • 作為互聯網行業,網站日誌占的份額最大,網站日誌存儲在多台網站日誌伺服器上,

  • 一般是在每台網站日誌伺服器上部署flume agent,實時的收集網站日誌並存儲到HDFS上;

  • 業務資料庫:


  • 業務資料庫的種類也是多種多樣,有Mysql、Oracle、SqlServer等,這時候,我們迫切的需要一種能從各種資料庫中將數據同步到HDFS上的工具,Sqoop是一種,但是Sqoop太過繁重,而且不管數據量大小,都需要啟動MapRece來執行,而且需要Hadoop集群的每台機器都能訪問業務資料庫;應對此場景,淘寶開源的DataX,是一個很好的解決方案(可參考文章 《異構數據源海量數據交換工具-Taobao DataX 下載和使用》),有資源的話,可以基於DataX之上做二次開發,就能非常好的解決,我們目前使用的DataHub也是。

  • 當然,Flume通過配置與開發,也可以實時的從資料庫中同步數據到HDFS。

  • 來自於Ftp/Http的數據源:


  • 有可能一些合作夥伴提供的數據,需要通過Ftp/Http等定時獲取,DataX也可以滿足該需求;

  • 其他數據源:


  • 比如一些手工錄入的數據,只需要提供一個介面或小程序,即可完成;


  • 數據存儲與分析毋庸置疑,HDFS是大數據環境下數據倉庫/數據平台最完美的數據存儲解決方案。


  • 離線數據分析與計算,也就是對實時性要求不高的部分,在我看來,Hive還是首當其沖的選擇,豐富的數據類型、內置函數;壓縮比非常高的ORC文件存儲格式;非常方便的SQL支持,使得Hive在基於結構化數據上的統計分析遠遠比MapRece要高效的多,一句SQL可以完成的需求,開發MR可能需要上百行代碼;

  • 當然,使用Hadoop框架自然而然也提供了MapRece介面,如果真的很樂意開發Java,或者對SQL不熟,那麼也可以使用MapRece來做分析與計算;Spark是這兩年非常火的,經過實踐,它的性能的確比MapRece要好很多,而且和Hive、Yarn結合的越來越好,因此,必須支持使用Spark和SparkSQL來做分析和計算。因為已經有Hadoop Yarn,使用Spark其實是非常容易的,不用單獨部署Spark集群,關於Spark On Yarn的相關文章,可參考:《Spark On Yarn系列文章》

  • 實時計算部分,後面單獨說。

  • 數據共享這里的數據共享,其實指的是前面數據分析與計算後的結果存放的地方,其實就是關系型資料庫和NOSQL資料庫;


  • 前面使用Hive、MR、Spark、SparkSQL分析和計算的結果,還是在HDFS上,但大多業務和應用不可能直接從HDFS上獲取數據,那麼就需要一個數據共享的地方,使得各業務和產品能方便的獲取數據;和數據採集層到HDFS剛好相反,這里需要一個從HDFS將數據同步至其他目標數據源的工具,同樣,DataX也可以滿足。

  • 另外,一些實時計算的結果數據可能由實時計算模塊直接寫入數據共享。


  • 數據應用
  • 業務產品


  • 業務產品所使用的數據,已經存在於數據共享層,他們直接從數據共享層訪問即可;

  • 報表


  • 同業務產品,報表所使用的數據,一般也是已經統計匯總好的,存放於數據共享層;

  • 即席查詢


  • 即席查詢的用戶有很多,有可能是數據開發人員、網站和產品運營人員、數據分析人員、甚至是部門老大,他們都有即席查詢數據的需求;

  • 這種即席查詢通常是現有的報表和數據共享層的數據並不能滿足他們的需求,需要從數據存儲層直接查詢。

  • 即席查詢一般是通過SQL完成,最大的難度在於響應速度上,使用Hive有點慢,目前我的解決方案是SparkSQL,它的響應速度較Hive快很多,而且能很好的與Hive兼容。

  • 當然,你也可以使用Impala,如果不在乎平台中再多一個框架的話。

  • OLAP


  • 目前,很多的OLAP工具不能很好的支持從HDFS上直接獲取數據,都是通過將需要的數據同步到關系型資料庫中做OLAP,但如果數據量巨大的話,關系型資料庫顯然不行;

  • 這時候,需要做相應的開發,從HDFS或者HBase中獲取數據,完成OLAP的功能;

  • 比如:根據用戶在界面上選擇的不定的維度和指標,通過開發介面,從HBase中獲取數據來展示。

  • 其它數據介面


  • 這種介面有通用的,有定製的。比如:一個從Redis中獲取用戶屬性的介面是通用的,所有的業務都可以調用這個介面來獲取用戶屬性。


  • 實時計算現在業務對數據倉庫實時性的需求越來越多,比如:實時的了解網站的整體流量;實時的獲取一個廣告的曝光和點擊;在海量數據下,依靠傳統資料庫和傳統實現方法基本完成不了,需要的是一種分布式的、高吞吐量的、延時低的、高可靠的實時計算框架;Storm在這塊是比較成熟了,但我選擇Spark Streaming,原因很簡單,不想多引入一個框架到平台中,另外,Spark Streaming比Storm延時性高那麼一點點,那對於我們的需要可以忽略。

  • 我們目前使用Spark Streaming實現了實時的網站流量統計、實時的廣告效果統計兩塊功能。

  • 做法也很簡單,由Flume在前端日誌伺服器上收集網站日誌和廣告日誌,實時的發送給Spark Streaming,由Spark Streaming完成統計,將數據存儲至Redis,業務通過訪問Redis實時獲取。

  • 任務調度與監控在數據倉庫/數據平台中,有各種各樣非常多的程序和任務,比如:數據採集任務、數據同步任務、數據分析任務等;


  • 這些任務除了定時調度,還存在非常復雜的任務依賴關系,比如:數據分析任務必須等相應的數據採集任務完成後才能開始;數據同步任務需要等數據分析任務完成後才能開始;這就需要一個非常完善的任務調度與監控系統,它作為數據倉庫/數據平台的中樞,負責調度和監控所有任務的分配與運行。

  • 前面有寫過文章,《大數據平台中的任務調度與監控》,這里不再累贅。

  • 總結在我看來架構並不是技術越多越新越好,而是在可以滿足需求的情況下,越簡單越穩定越好。目前在我們的數據平台中,開發更多的是關注業務,而不是技術,他們把業務和需求搞清楚了,基本上只需要做簡單的SQL開發,然後配置到調度系統就可以了,如果任務異常,會收到告警。這樣,可以使更多的資源專注於業務之上。

③ 大數據量的系統的資料庫結構如何設計

1、把你表中經常查詢的和不常用的分開幾個表,也就是橫向切分
2、把不同類型的分成幾個表,縱向切分
3、常用聯接的建索引
4、伺服器放幾個硬碟,把數據、日誌、索引分盤存放,這樣可以提高IO吞吐率
5、用優化器,優化你的查詢
6、考慮冗餘,這樣可以減少連接
7、可以考慮建立統計表,就是實時生成總計表,這樣可以避免每次查詢都統計一次
mrzxc 等說的好,考慮你的系統,注意負載平衡,查詢優化,25 萬並不大,可以建一個表,然後按mrzxc 的3 4 5 7 優化。 速度,影響它的因數太多了,且數據量越大越明顯。
1、存儲 將硬碟分成NTFS格式,NTFS比FAT32快,並看你的數據文件大小,1G以上你可以採用多資料庫文件,這樣可以將存取負載分散到多個物理硬碟或磁碟陣列上。
2、tempdb tempdb也應該被單獨的物理硬碟或磁碟陣列上,建議放在RAID 0上,這樣它的性能最高,不要對它設置最大值讓它自動增長
3、日誌文件 日誌文件也應該和數據文件分開在不同的理硬碟或磁碟陣列上,這樣也可以提高硬碟I/O性能。
4、分區視圖 就是將你的數據水平分割在集群伺服器上,它適合大規模OLTP,SQL群集上,如果你資料庫不是訪問特別大不建議使用。
5、簇索引 你的表一定有個簇索引,在使用簇索引查詢的時候,區塊查詢是最快的,如用between,應為他是物理連續的,你應該盡量減少對它的updaet,應為這可以使它物理不連續。
6、非簇索引 非簇索引與物理順序無關,設計它時必須有高度的可選擇性,可以提高查詢速度,但對表update的時候這些非簇索引會影響速度,且佔用空間大,如果你願意用空間和修改時間換取速度可以考慮。
7、索引視圖 如果在視圖上建立索引,那視圖的結果集就會被存儲起來,對與特定的查詢性能可以提高很多,但同樣對update語句時它也會嚴重減低性能,一般用在數據相對穩定的數據倉庫中。
8、維護索引 你在將索引建好後,定期維護是很重要的,用dbcc showcontig來觀察頁密度、掃描密度等等,及時用dbcc indexdefrag來整理表或視圖的索引,在必要的時候用dbcc dbreindex來重建索引可以受到良好的效果。 不論你是用幾個表1、2、3點都可以提高一定的性能,5、6、8點你是必須做的,至於4、7點看你的需求,我個人是不建議的。打了半個多小時想是在寫論文,希望對你有幫助。

④ 資料庫設計主要包括哪幾部分,分別包括哪些內容

資料庫設計包括六個主要步驟:
1、需求分析:了解用戶的數據需求、處理需求、安全性及完整性要求;
2、概念設計:通過數據抽象,設計系統概念模型,一般為E-R模型;
3、邏輯結構設計:設計系統的模式和外模式,對於關系模型主要是基本表和視圖;
4、物理結構設計:設計數據的存儲結構和存取方法,如索引的設計;
5、系統實施:組織數據入庫、編制應用程序、試運行;
6、運行維護:系統投入運行,長期的維護工作。

⑤ 資料庫邏輯結構設計包含哪些內容

邏輯結構設計是將概念結構設計階段完成的概念模型,轉換成能被選定的資料庫管理系統(DBMS)支持的數據模型。這里主要將E-R模型轉換為關系模型。需要具體說明把原始數據進行分解、合並後重新組織起來的資料庫全局邏輯結構,包括所確定的關鍵字和屬性、重新確定的記錄結構和文件結構、所建立的各個文件之間的相互關系,形成本資料庫的資料庫管理員視圖。
邏輯結構設計一般分為三步進行:
1. 從E-R圖向關系模式轉化 資料庫的邏輯設計主要是將概念模型轉換成一般的關系模式,也就是將E-R圖中的實體、實體的屬性和實體之間的聯系轉化為關系模式。在轉化過程中會遇到如下問題:
(1)命名問題。命名問題可以採用原名,也可以另行命名,避免重名。
(2)非原子屬性問題。非原子屬性問題可將其進行縱向和橫行展開。
(3)聯系轉換問題。聯系可用關系表示。
2. 數據模型的優化 資料庫邏輯設計的結果不是唯一的。為了進一步提高資料庫應用系統的性能,還應該適當修改數據模型的結構,提高查詢的速度。
3. 關系視圖設計 關系視圖的設計又稱為外模式的設計,也叫用戶模式設計,是用戶可直接訪問的數據模式。同一系統中,不同用戶可有不同的關系視圖。關系視圖來自邏輯模式,但在結構和形式上可能不同於邏輯模式,所以它不是邏輯模式的簡單子集。
關系視圖主要有三個作用:
(1)通過外模式對邏輯模式的屏蔽,為應用程序提供了一定的邏輯獨立性。
(2)更好地適應不同用戶對數據的不同需求。
(3)為不同用戶劃定了訪問數據的不同范圍,有利於數據的保密。

⑥ 資料庫設計分哪幾個階段

按照規范的設計方法,一個完整的資料庫設計一般分為以下六個階段。

1、需求分析:分析用戶的需求,包括數據、功能和性能需求

2、概念結構設計:主要採用E-R模型進行設計,包括畫E-R圖

3、邏輯結構設計:通過將E-R圖轉換成表,實現從E-R模型到關系模型的轉換

4、資料庫物理設計:主要是為所設計的資料庫選擇合適的存儲結構和存取路徑

5、資料庫的實施:包括編程、測試和試運行

6、資料庫運行與維護:系統的運行與資料庫的日常維護

(6)資料庫架構設計擴展閱讀:

設計原則

1、一對一設計原則

在軟體開發過程中,需要遵循一對一關系設計原則進而開展數據維護工作,通過利用此原則能夠盡量減少維護問題的出現,保證數據維護工作順利開展同時降低維護工作難度。

2、獨特命名原則

獨特命名原則的應用是為了減少在資料庫設計過程中出現重復命名和規范命名現象出現。

3、雙向使用原則

雙向使用原則包括:事務使用原則和索引功能原則,軟體市場常見的索引模式有:多行檢索聚簇索引和單行檢索非聚簇索引。

⑦ 資料庫的物理結構設計指的是什麼

Log File物理結構

log block結構分為日誌頭段、日誌記錄、日誌尾部

  • Block Header,佔用12位元組

  • Data部分

  • Block tailer,佔用4位元組

  • Block Header

    這個部分是每個Block的頭部,主要記錄的塊的信息

  • Block Number,表示這是第幾個block,佔用4位元組,是通過LSN計算得來的,佔用4位元組

  • Block data len,表示該block中有多少位元組已經被使用了,佔用2位元組

  • First Rec offet,表示該block中作為第一個新的mtr開始的偏移量,佔用2位元組

  • Checkpoint number,表示該log block最後被寫入時的檢查點的值,佔用4位元組

  • ⑧ 資料庫如何設計

    資料庫設計的基本步驟

    按照規范設計的方法,考慮資料庫及其應用系統開發全過程,將資料庫設計分為以下6個階段

    1.需求分析

    2.概念結構設計

    3.邏輯結構設計

    4.物理結構設計

    5.資料庫實施

    6.資料庫的運行和維護


    資料庫設計通常分為6個階段1分析用戶的需求,包括數據、功能和性能需求;2概念結構設計:主要採用E-R模型進行設計,包括畫E-R圖;3邏輯結構設計:通過將轉換成表,實現從E-R模型到關系模型的轉換;4:主要是為所設計的資料庫選擇合適的和存取路徑;5資料庫的實施:包括編程、測試和試運行;6資料庫運行與維護:系統的運行與資料庫的日常維護。),主要討論其中的第3個階段,即邏輯設計。



    在資料庫設計過程中,需求分析和概念設計可以獨立於任何資料庫管理系統進行,邏輯設計和物理設計與選用的DAMS密切相關。

    1.需求分析階段(常用自頂向下)

    進行資料庫設計首先必須准確了解和分析用戶需求(包括數據與處理)。需求分析是整個設計過程的基礎,也是最困難,最耗時的一步。需求分析是否做得充分和准確,決定了在其上構建資料庫大廈的速度與質量。需求分析做的不好,會導致整個資料庫設計返工重做。

    需求分析的任務,是通過詳細調查現實世界要處理的對象,充分了解原系統工作概況,明確用戶的各種需求,然後在此基礎上確定新的系統功能,新系統還得充分考慮今後可能的擴充與改變,不僅僅能夠按當前應用需求來設計。

    調查的重點是,數據與處理。達到信息要求,處理要求,安全性和完整性要求。

    分析方法常用SA(Structured Analysis) 結構化分析方法,SA方法從最上層的系統組織結構入手,採用自頂向下,逐層分解的方式分析系統。

    數據流圖表達了數據和處理過程的關系,在SA方法中,處理過程的處理邏輯常常藉助判定表或判定樹來描述。在處理功能逐步分解的同事,系統中的數據也逐級分解,形成若干層次的數據流圖。系統中的數據則藉助數據字典(data dictionary,DD)來描述。數據字典是系統中各類數據描述的集合,數據字典通常包括數據項,數據結構,數據流,數據存儲,和處理過程5個階段。

    2.概念結構設計階段(常用自底向上)

    概念結構設計是整個資料庫設計的關鍵,它通過對用戶需求進行綜合,歸納與抽象,形成了一個獨立於具體DBMS的概念模型。

    設計概念結構通常有四類方法:

    • 自頂向下。即首先定義全局概念結構的框架,再逐步細化。

    • 自底向上。即首先定義各局部應用的概念結構,然後再將他們集成起來,得到全局概念結構。

    • 逐步擴張。首先定義最重要的核心概念結構,然後向外擴張,以滾雪球的方式逐步生成其他的概念結構,直至總體概念結構。

    • 混合策略。即自頂向下和自底向上相結合。

    • 3.邏輯結構設計階段(E-R圖)

      邏輯結構設計是將概念結構轉換為某個DBMS所支持的數據模型,並將進行優化。

      在這階段,E-R圖顯得異常重要。大家要學會各個實體定義的屬性來畫出總體的E-R圖。

      各分E-R圖之間的沖突主要有三類:屬性沖突,命名沖突,和結構沖突。

      E-R圖向關系模型的轉換,要解決的問題是如何將實體性和實體間的聯系轉換為關系模式,如何確定這些關系模式的屬性和碼。

      4.物理設計階段

      物理設計是為邏輯數據結構模型選取一個最適合應用環境的物理結構(包括存儲結構和存取方法)。

      首先要對運行的事務詳細分析,獲得選擇物理資料庫設計所需要的參數,其次,要充分了解所用的RDBMS的內部特徵,特別是系統提供的存取方法和存儲結構。

      常用的存取方法有三類:1.索引方法,目前主要是B+樹索引方法。2.聚簇方法(Clustering)方法。3.是HASH方法。

      5.資料庫實施階段

      資料庫實施階段,設計人員運營DBMS提供的資料庫語言(如sql)及其宿主語言,根據邏輯設計和物理設計的結果建立資料庫,編制和調試應用程序,組織數據入庫,並進行試運行。

      6.資料庫運行和維護階段

      資料庫應用系統經過試運行後,即可投入正式運行,在資料庫系統運行過程中必須不斷地對其進行評價,調整,修改。

      資料庫設計5步驟
      Five Steps to design the Database

      1.確定entities及relationships

      a)明確宏觀行為。資料庫是用來做什麼的?比如,管理雇員的信息。

      b)確定entities。對於一系列的行為,確定所管理信息所涉及到的主題范圍。這將變成table。比如,僱用員工,指定具體部門,確定技能等級。

      c)確定relationships。分析行為,確定tables之間有何種關系。比如,部門與雇員之間存在一種關系。給這種關系命名。

      d)細化行為。從宏觀行為開始,現在仔細檢查這些行為,看有哪些行為能轉為微觀行為。比如,管理雇員的信息可細化為:

      · 增加新員工

      · 修改存在員工信息

      · 刪除調走的員工

      e)確定業務規則。分析業務規則,確定你要採取哪種。比如,可能有這樣一種規則,一個部門有且只能有一個部門領導。這些規則將被設計到資料庫的結構中。

      ====================================================================
      範例:
      ACME是一個小公司,在5個地方都設有辦事處。當前,有75名員工。公司准備快速擴大規模,劃分了9個部門,每個部門都有其領導。
      為有助於尋求新的員工,人事部門規劃了68種技能,為將來人事管理作好准備。員工被招進時,每一種技能的專業等級都被確定。


      定義宏觀行為
      一些ACME公司的宏觀行為包括:
      ● 招聘員工
      ● 解僱員工
      ● 管理員工個人信息
      ● 管理公司所需的技能信息
      ● 管理哪位員工有哪些技能
      ● 管理部門信息
      ● 管理辦事處信息
      確定entities及relationships
      我們可以確定要存放信息的主題領域(表)及其關系,並創建一個基於宏觀行為及描述的圖表。
      我們用方框來代表table,用菱形代表relationship。我們可以確定哪些relationship是一對多,一對一,及多對多。
      這是一個E-R草圖,以後會細化。


      細化宏觀行為
      以下微觀行為基於上面宏觀行為而形成:
      ● 增加或刪除一個員工
      ● 增加或刪除一個辦事處
      ● 列出一個部門中的所有員工
      ● 增加一項技能
      ● 增加一個員工的一項技能
      ● 確定一個員工的技能
      ● 確定一個員工每項技能的等級
      ● 確定所有擁有相同等級的某項技能的員工
      ● 修改員工的技能等級

      這些微觀行為可用來確定需要哪些table或relationship。

      確定業務規則
      業務規則常用於確定一對多,一對一,及多對多關系。
      相關的業務規則可能有:
      ● 現在有5個辦事處;最多允許擴展到10個。
      ● 員工可以改變部門或辦事處
      ● 每個部門有一個部門領導
      ● 每個辦事處至多有3個電話號碼
      ● 每個電話號碼有一個或多個擴展
      ● 員工被招進時,每一種技能的專業等級都被確定。
      ● 每位員工擁有3到20個技能
      ● 某位員工可能被安排在一個辦事處,也可能不安排辦事處。

      2.確定所需數據

      要確定所需數據:

      a)確定支持數據

      b)列出所要跟蹤的所有數據。描述table(主題)的數據回答這些問題:誰,什麼,哪裡,何時,以及為什麼

      c)為每個table建立數據

      d)列出每個table目前看起來合適的可用數據

      e)為每個relationship設置數據

      f)如果有,為每個relationship列出適用的數據

      確定支持數據

      你所確定的支持數據將會成為table中的欄位名。比如,下列數據將適用於表Employee,表Skill,表Expert In。

      Employee

    • Skill

    • Expert In

    • ID

    • ID

    • Level

    • Last Name

    • Name

    • Date acquired

    • First Name

    • Description

    • Department

    • Office

    • Address


    • 如果將這些數據畫成圖表,就像:


    • 需要注意:

    • ● 在確定支持數據時,請一定要參考你之前所確定的宏觀行為,以清楚如何利用這些數據。

    • ● 比如,如果你知道你需要所有員工的按姓氏排序的列表,確保你將支持數據分解為名字與姓氏,這比簡單地提供一個名字會更好。

    • ● 你所選擇的名稱最好保持一致性。這將更易於維護資料庫,也更易於閱讀所輸出的報表。

    • ● 比如,如果你在某些地方用了一個縮寫名稱Emp_status,你就不應該在另外一個地方使用全名(Empolyee_ID)。相反,這些名稱應當是Emp_status及Emp_id。

    • ● 數據是否與正確的table相對應無關緊要,你可以根據自己的喜好來定。在下節中,你會通過測試對此作出判斷。
    • 3.標准化數據

      標准化是你用以消除數據冗餘及確保數據與正確的table或relationship相關聯的一系列測試。共有5個測試。本節中,我們將討論經常使用的3個。
      關於標准化測試的更多信息,請參考有關資料庫設計的書籍。

      標准化格式
      標准化格式是標准化數據的常用測試方式。你的數據通過第一遍測試後,就被認為是達到第一標准化格式;通過第二遍測試,達到第二標准化格式;通過第三遍測試,達到第三標准化格式。

      如何標准格式:
      1. 列出數據
      2. 為每個表確定至少一個鍵。每個表必須有一個主鍵。
      3. 確定relationships的鍵。relationships的鍵是連接兩個表的鍵。
      4. 檢查支持數據列表中的計算數據。計算數據通常不保存在資料庫中。
      5. 將數據放在第一遍的標准化格式中:
      6. 從tables及relationships除去重復的數據。
      7. 以你所除去數據創建一個或更多的tables及relationships。
      8. 將數據放在第二遍的標准化格式中:
      9. 用多於一個以上的鍵確定tables及relationships。
      10. 除去只依賴於鍵一部分的數據。
      11. 以你所除去數據創建一個或更多的tables及relationships。
      12. 將數據放在第三遍的標准化格式中:
      13. 除去那些依賴於tables或relationships中其他數據,並且不是鍵的數據。
      14. 以你所除去數據創建一個或更多的tables及relationships。

      數據與鍵
      在你開始標准化(測試數據)前,簡單地列出數據,並為每張表確定一個唯一的主鍵。這個鍵可以由一個欄位或幾個欄位(連鎖鍵)組成。

      主鍵是一張表中唯一區分各行的一組欄位。Employee表的主鍵是Employee ID欄位。Works In relationship中的主鍵包括Office Code及Employee ID欄位。給資料庫中每一relationship給出一個鍵,從其所連接的每一個table中抽取其鍵產生。

      RelationShip

    • Key

    • Office

    • *Office code

    • Office address

    • Phone number

    • Works in

    • *Office code

    • *Employee ID

    • Department

    • *Department ID

    • Department name

    • Heads

    • *Department ID

    • *Employee ID

    • Assoc with

    • *Department ID

    • *EmployeeID

    • Skill

    • *Skill ID

    • Skill name

    • Skill description

    • Expert In

    • *Skill ID

    • *Employee ID

    • Skill level

    • Date acquired

    • Employee

    • *Employee ID

    • Last Name

    • First Name

    • Social security number

    • Employee street

    • Employee city

    • Employee state

    • Employee phone

    • Date of birth


    • 將數據放在第一遍的標准化格式中
      ● 除去重復的組
      ● 要測試第一遍標准化格式,除去重復的組,並將它們放進他們各自的一張表中。
      ● 在下面的例子中,Phone Number可以重復。(一個工作人員可以有多於一個的電話號碼。)將重復的組除去,創建一個名為Telephone的新表。在Telephone與Office創建一個名為Associated With的relationship。

      將數據放在第二遍的標准化格式中
      ● 除去那些不依賴於整個鍵的數據。
      ● 只看那些有一個以上鍵的tables及relationships。要測試第二遍標准化格式,除去那些不依賴於整個鍵的任何數據(組成鍵的所有欄位)。
      ● 在此例中,原Employee表有一個由兩個欄位組成的鍵。一些數據不依賴於整個鍵;例如,department name只依賴於其中一個鍵(Department ID)。因此,Department ID,其他Employee數據並不依賴於它,應移至一個名為Department的新表中,並為Employee及Department建立一個名為Assigned To的relationship。


      將數據放在第三遍的標准化格式中
      ● 除去那些不直接依賴於鍵的數據。
      ● 要測試第三遍標准化格式,除去那些不是直接依賴於鍵,而是依賴於其他數據的數據。
      ● 在此例中,原Employee表有依賴於其鍵(Employee ID)的數據。然而,office location及office phone依賴於其他欄位,即Office Code。它們不直接依賴於Employee ID鍵。將這組數據,包括Office Code,移至一個名為Office的新表中,並為Employee及Office建立一個名為Works In的relationship。

      4.考量關系

      當你完成標准化進程後,你的設計已經差不多完成了。你所需要做的,就是考量關系。

      考量帶有數據的關系
      你的一些relationship可能集含有數據。這經常發生在多對多的關系中。

      遇到這種情況,將relationship轉化為一個table。relationship的鍵依舊成為table中的鍵。

      考量沒有數據的關系
      要實現沒有數據的關系,你需要定義外部鍵。外部鍵是含有另外一個表中主鍵的一個或多個欄位。外部鍵使你能同時連接多表數據。

      有一些基本原則能幫助你決定將這些鍵放在哪裡:

      一對多在一對多關系中,「一」中的主鍵放在「多」中。此例中,外部鍵放在Employee表中。

      一對一在一對一關系中,外部鍵可以放進任一表中。如果必須要放在某一邊,而不能放在另一邊,應該放在必須的一邊。此例中,外部鍵(Head ID)在Department表中,因為這是必需的。

      多對多在多對多關系中,用兩個外部鍵來創建一個新表。已存的舊表通過這個新表來發生聯系。

      5.檢驗設計

      在你完成設計之前,你需要確保它滿足你的需要。檢查你在一開始時所定義的行為,確認你可以獲取行為所需要的所有數據:
      ● 你能找到一個路徑來等到你所需要的所有信息嗎?
      ● 設計是否滿足了你的需要?
      ● 所有需要的數據都可用嗎?
      如果你對以上的問題都回答是,你已經差不多完成設計了。

      最終設計
      最終設計看起來就像這樣:

      設計資料庫的表屬性
      資料庫設計需要確定有什麼表,每張表有什麼欄位。此節討論如何指定各欄位的屬性。

      對於每一欄位,你必須決定欄位名,數據類型及大小,是否允許NULL值,以及你是否希望資料庫限制欄位中所允許的值。

      選擇欄位名
      欄位名可以是字母、數字或符號的任意組合。然而,如果欄位名包括了字母、數字或下劃線、或並不以字母打頭,或者它是個關鍵字(詳見關鍵字表),那麼當使用欄位名稱時,必須用雙引號括起來。

      為欄位選擇數據類型
      SQL Anywhere支持的數據類型包括:
      整數(int, integer, smallint)
      小數(decimal, numeric)
      浮點數(float, double)
      字元型(char, varchar, long varchar)
      二進制數據類型(binary, long binary)
      日期/時間類型(date, time, timestamp)
      用戶自定義類型

      關於數據類型的內容,請參見「SQL Anywhere數據類型」一節。欄位的數據類型影響欄位的最大尺寸。例如,如果你指定SMALLINT,此欄位可以容納32,767的整數。INTEGER可以容納2,147,483,647的整數。對CHAR來講,欄位的最大值必須指定。

      長二進制的數據類型可用來在資料庫中保存例如圖像(如點陣圖)或者文字編輯文檔。這些類型的信息通常被稱為二進制大型對象,或者BLOBS。

      關於每一數據類型的完整描述,見「SQL Anywhere數據類型」。

    ⑨ 資料庫結構設計包括哪些

    數據組織是數據管理的基礎
    數據組織結構
    設計是指按照一定的方式和規則對數據進行歸並、存儲、處理的過程。
    資料庫結構設計主要包括:
    概念結構設計
    邏輯結構設計
    物理結構設計

    熱點內容
    解決跨站腳本攻擊 發布:2024-10-27 09:31:56 瀏覽:679
    安卓怎麼下載國際版公寓 發布:2024-10-27 09:31:49 瀏覽:557
    奇跡免費連擊腳本 發布:2024-10-27 09:18:10 瀏覽:877
    python278 發布:2024-10-27 09:13:07 瀏覽:239
    排列組合演算法c 發布:2024-10-27 09:11:41 瀏覽:436
    希捷伺服器硬碟能用於普通電腦嗎 發布:2024-10-27 09:10:44 瀏覽:543
    php訪問量統計 發布:2024-10-27 08:56:39 瀏覽:251
    androidactivity關閉 發布:2024-10-27 08:50:01 瀏覽:774
    安川模擬腳本 發布:2024-10-27 08:30:46 瀏覽:331
    安卓卸載應用在哪裡可以找到 發布:2024-10-27 08:30:43 瀏覽:194