資料庫設計怎麼寫
㈠ 資料庫設計的基本步驟
資料庫設計的基本步驟
1、需求分析階段
進行資料庫設計首先必須准確了解與分析用戶需求(包括數據與處理)。需求分析是整個設計過程的基礎,是最困難和最耗費時間的一步。作為「地基」的需求分析是否做得充分與准確,決定了在其上構建資料庫「大廈」的速度與質量。需求分析做的不好,可能會導致整個資料庫設計返工重做。
2、概念結構設計階段
概念結構設計階段是整個資料庫設計的關鍵,它通過對用戶需求進行綜合、歸納與抽象,形成一個獨立於具體資料庫管理系統的概念模型。
3、邏輯結構設計階段
邏輯結構設計是將概念結構轉換為某個資料庫管理系統所支持的數據模型,並對其進行優化。
4、物理設計階段
物理結構設計師為邏輯數據模型選取一個最適合應用環境的物理結構(包括存儲結構和存取方式)。
5、資料庫實施階段
在資料庫實施階段,設計人員運用資料庫管理系統提供資料庫語言及其宿主語言,根據邏輯設計和物理設計的結果建立資料庫,編寫與調試應用程序,組織數據入庫,並進行測試運行。
6、資料庫運行和維護階段
資料庫應用系統經過試運行後即可投入正式運行,在資料庫系統運行過程中必須不斷對其進行評估、調整與修改。
資料庫設計的基本原則
1、一致性原則:對數據來源進行統一、系統的分析與設計,協調好各種數據源,保證數據的一致性和有效性。
2、完整性原則:資料庫的完整性是指數據的正確性和相容性。要防止合法用戶使用資料庫時向資料庫加入不合語義的數據。對輸入到資料庫中的數據要有審核和約束機制。
3、安全性原則:資料庫的安全性是指保護數據,防止非法用戶使用資料庫或合法用戶非法使用資料庫造成數據泄露、更改或破壞。要有認證和授權機制。
4、可伸縮性與可擴展性原則:資料庫結構的設計應充分考慮發展的需要、移植的需要,具有良好的擴展性、伸縮性和適度冗餘。
5、規范化原則:資料庫的設計應遵循規范化理論。規范化的資料庫設計,可以減少資料庫插入、刪除、修改等操作時的異常和錯誤,降低數據冗餘度等。
㈡ 論文中資料庫概念設計怎麼寫
a、需求分析階段:綜合各個用戶的應用需求。
b、在概念設計階段:用e-r圖來描述。
c、在邏輯設計階段:將e-r圖轉換成具體的資料庫產品支持的數據模型,如關系模型,形成資料庫邏輯模式。然後根據用戶處理的要求,安全性的考慮,在基本表的基礎上再建立必要的視圖(view)形成數據的外模式。
d、在物理設計階段:根據dbms特點和處理的需要,進行物理存儲安排,設計索引,形成資料庫內模式。
一展開就夠論文字數了
㈢ 資料庫如何設計
資料庫設計的基本步驟
按照規范設計的方法,考慮資料庫及其應用系統開發全過程,將資料庫設計分為以下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的概念模型。
設計概念結構通常有四類方法:
自頂向下。即首先定義全局概念結構的框架,再逐步細化。
自底向上。即首先定義各局部應用的概念結構,然後再將他們集成起來,得到全局概念結構。
逐步擴張。首先定義最重要的核心概念結構,然後向外擴張,以滾雪球的方式逐步生成其他的概念結構,直至總體概念結構。
混合策略。即自頂向下和自底向上相結合。
- 需要注意:
- ● 在確定支持數據時,請一定要參考你之前所確定的宏觀行為,以清楚如何利用這些數據。
- ● 比如,如果你知道你需要所有員工的按姓氏排序的列表,確保你將支持數據分解為名字與姓氏,這比簡單地提供一個名字會更好。
- ● 你所選擇的名稱最好保持一致性。這將更易於維護資料庫,也更易於閱讀所輸出的報表。
- ● 比如,如果你在某些地方用了一個縮寫名稱Emp_status,你就不應該在另外一個地方使用全名(Empolyee_ID)。相反,這些名稱應當是Emp_status及Emp_id。
- ● 數據是否與正確的table相對應無關緊要,你可以根據自己的喜好來定。在下節中,你會通過測試對此作出判斷。
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
如果將這些數據畫成圖表,就像:
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數據類型」。
㈣ 具體的資料庫設計與實現過程
大致的講主要是根據用戶的需求,然後設計資料庫的E-R模型,然後將E-R模型圖轉換為各種表,並對其進行資料庫設計範式(範式因不同書籍有不同)的審核,然後進行資料庫的實施,然後運行維護。
一句話來講就是將用戶的需求變成帶有各種關系的表,以及其它的資料庫結構,然後供編程使用
具體如下:
按照規范設計的方法,考慮資料庫及其應用系統開發全過程,將資料庫設計分為以下六個階段
(1)需求分析。
(2)概念設計。
(3)邏輯設計。
(4)物理設計。
(5)資料庫實施。
(6)資料庫運行和維護。
5.1.1需求分析階段
進行資料庫設計首先必須准確了解與分析用戶需求,包括數據與處理需求。需求分析是整個設計過程的基礎,是最困難、最耗時的一步。作為「地基」的需求分析是否做得充分與准確,決定了在其上構建「資料庫大廈」的速度與質量。需求分析做得不好,可能會導致整個資料庫重新設計,因此,務必引起高度重視。
5.1.2概念模型設計階段
在概念設計階段,設計人員僅從用戶角度看待數據及其處理要求和約束,產生一個反映用戶觀點的概念模式,也稱為「組織模式」。概念模式能充分反映現實世界中實體間的聯系,又是各種基本數據模型的共同基礎,易於向關系模型轉換。這樣做有以下好處:
(1)資料庫設計各階段的任務相對單一化,設計復雜程度得到降低,便於組織管理。
(2)概念模式不受特定DBMS的限制,也獨立於存儲安排,因而比邏輯設計得到的模式更為穩定。
(3)概念模式不含具體的DBMS所附加的技術細節,更容易為用戶所理解,因而能准確地反映用戶的信息需求蠢兆信。
概念模型設計是整個資料庫設計的關鍵,它通過對用戶需求進行綜合、歸納與抽象,形成一個獨立於具體DBMS的概念模型。如採用基於E-R模型的資料庫設計方法,該階段即將所設計的對象抽象出E-R模型;如採用用戶視圖法,則應設計出不同的用戶視圖。
5.1.3邏輯模型設計階段
邏輯模型設計階段的任務是將概念模型設計階段得到的基本E-R圖,轉換為與選用的DBMS產品所支持的數據模型相符合的邏輯結構。如採用基於E-R模型的資料庫設計方法,該階段就是將所設計的E-R模型轉換為某個DBMS所支持的數據模型;如採用用戶視圖法,則應進行表的規范化,列出所有的關鍵字以及用數據結構圖描述表集合中的約束與聯系,匯總各用戶視圖的設計結果,將所有的用戶視圖合成一個復雜的資料庫系統。
5.1.4資料庫物理設計階段
資料庫的物理結構主要指資料庫的存儲記錄格式、存儲記錄安排和存取方法。顯然,資料庫的物理設計完全依賴於給定的硬體環境和資料庫產品。在關系模型系統中,物理設計比較簡單一些,因為文件形式是單記錄類型文件,僅包含索引機制、空間大小、塊的大小等內容。
物理設計可分五步完成,前三步涉及到物理結構設計,後兩步涉及到約束和具體的程序設計:
(1)存儲記錄結構設計:包括記錄的猜型組成、數據項的類型、長度,以及邏輯記錄到存儲記錄的映射。
(2)確定數據存放位置:可以把經常同時被訪問的數據組合在一起,「記錄聚簇(cluster)」技帶輪術能滿足這個要求。
(3)存取方法的設計:存取路徑分為主存取路徑及輔存取路徑,前者用於主鍵檢索,後者用於輔助鍵檢索。
(4)完整性和安全性考慮:設計者應在完整性、安全性、有效性和效率方面進行分析,作出權衡。
(5)程序設計:在邏輯資料庫結構確定後,應用程序設計就應當隨之開始。物理數據獨立性的目的是消除由於物理結構的改變而引起對應用程序的修改。當物理獨立性未得到保證時,可能會引發對程序的修改。
資料庫物理設計是為邏輯數據模型選取一個最適合應用環境的物理結構,包括存儲結構和存取方法。
5.1.5資料庫實施階段
根據邏輯設計和物理設計的結果,在計算機系統上建立起實際資料庫結構、裝入數據、測試和試運行的過程稱為資料庫的實施階段。實施階段主要有三項工作。
(1)建立實際資料庫結構。對描述邏輯設計和物理設計結果的程序即「源模式」,經DBMS編譯成目標模式並執行後,便建立了實際的資料庫結構。
(2)裝入試驗數據對應用程序進行調試。試驗數據可以是實際數據,也可由手工生成或用隨機數發生器生成。應使測試數據盡可能覆蓋現實世界的各種情況。
(3)裝入實際數據,進入試運行狀態。測量系統的性能指標,是否符合設計目標。如果不符,則返回到前面,修改資料庫的物理模型設計甚至邏輯模型設計。
5.1.6資料庫運行和維護階段
資料庫系統正式運行,標志著資料庫設計與應用開發工作的結束和維護階段的開始。運行維護階段的主要任務有四項:
(1)維護資料庫的安全性與完整性:檢查系統安全性是否受到侵犯,及時調整授權和密碼,實施系統轉儲與備份,發生故障後及時恢復。
(2)監測並改善資料庫運行性能:對資料庫的存儲空間狀況及響應時間進行分析評價,結合用戶反應確定改進措施。
(3)根據用戶要求對資料庫現有功能進行擴充。
(4)及時改正運行中發現的系統錯誤。
㈤ 用PHP做多項選擇題,資料庫怎麼設計, 代碼怎麼寫....
常規思路
表1(問題)
question
id(主鍵) text(問題內容) rightAnswer(正確答案)
表2(備選答案)
answer
id(主鍵) qid(對應的問題id) text(備選答案)
$sql="SELECT * FROM question";
$r = mysql_query($sql);
while($row = mysql_fetch_rows($r)){
//輸出題干
echo $row[1];
$subsql="SELECT * FROM answer WHERE qid = '".$row[0]."'";
$subr = mysql_query($subsql);
while($subrow = mysql_fetch_rows($subr)){
//輸出備選答案
echo subrow[2];
}
}
我相信這是比較主流的設計思路,希望的幫到你
至於比對答案的時候,有一種簡單做法,你傳回來的答案不是數組嗎,將資料庫正確答案以字元串形式輸出,打散成數組,求2個數組的交集,根據交集數量判斷正確個數
不懂歡迎追問