1、實驗目的
掌握數據庫設計基本方法及數據庫設計工具。
2、實驗內容及要求
掌握數據庫設計基本步驟,包括數據庫概念結構設計、邏輯結構設計、物理結構設計、數據庫模式SQL語句生成。
3、實驗步驟
設計一個采購、銷售和客戶管理應用數據庫。其中,一個供應商可以供應多種零件,一個零件也可以有多個供應商。一個客戶訂單可以訂購多種供應商供應的零件。客戶和供應商都分屬不同的國家,而國家按世界五大洲八大洋划分地區。請設計該數據庫。
(1)需求分析
要求實現一個銷售應用數據庫。在此數據庫中7個實體:零件、供應商、顧客、訂單、訂單明細、國家、地區。
此系統的業務要求是:
其中,一個供應商可以供應多種零件,一個零件也可以有多個供應商。一個客戶訂單可以訂購多種供應商供應的零件。客戶和供應商都分屬不同的國家,而國家按世界五大洲八大洋划分地區。
該系統的基本信息是:
地區表:地區編號,地區名稱,備注
國家表:國家編號,國家名稱,地區編號,備注
零件表:零件編號,零件名稱,制作商,品牌,零售價格,備注
顧客表:顧客編號,地址,姓名,國家編號,電話,賬戶余額,備注
供應商表:供應商編號,供應商名稱,地址,國家編號,電話,備注,供應商賬余額
訂單表:訂單編號,訂單總價,訂單狀態,訂單日期,訂單優先級,記賬員,備注,顧客編號
訂單明細表:訂單的詳細內容的報表,內容包括:零件編號,訂單編號,供應商編號,零件數量,訂單明細價格,折扣,備注
還需要產生報表:
零件供應商聯系表:供應商與零件聯系的表。內容包括零件編號、可用數量、供應價格、供應商編號、備注
(2)數據庫概念結構設計
設計E-R圖
根據需求分析的結構可知,該E-R模型中各實體所包含的屬性如下:
1. 地區表:地區編號,地區名稱,備注
2. 國家表:國家編號,國家名稱,地區編號,備注
3. 顧客表:顧客編號,地址,姓名,國家編號,電話,賬戶余額,備注
4.供應商表:供應商編號,供應商名稱,地址,國家編號,電話,備注,供應商賬余額
5. 訂單表:訂單編號,訂單總價,訂單狀態,訂單日期,訂單優先級,記賬員,備注,顧客編號
6.訂單明細表:訂單的詳細內容的報表,內容包括:零件編號,訂單編號,供應商編號,零件數量,訂單明細價格,折扣,備注
7. 零件表:零件編號,零件名稱,制作商,品牌,零售價格,備注
8.零件供應商聯系表:零件編號、可用數量、供應價格、供應商編號、備注
(3)數據庫邏輯結構設計
設計關系模式
把上面的E-R圖轉換為關系模型
1. 地區表(地區編號,地區名稱,備注)
主碼:地區編號
2. 國家表(國家編號,國家名稱,地區編號,備注)
主碼:國家編號
外碼:地區編號 為引用地區表的地區編號的外碼
關系:國家表屬於地區表
3. 顧客(顧客編號,地址,姓名,國家編號,電話,賬戶余額,備注)
主碼:顧客編號
外碼:國家編號,為引用國家表的國家編號
關系:國家擁有顧客
4.供應商(供應商編號,供應商名稱,地址,國家編號,電話,備注,供應商賬余額)
主碼:供應商編號
外碼:國家編號,為引用國家表的國家編號
關系:國家擁有供應商
5. 訂單表(訂單編號,訂單總價,訂單狀態,訂單日期,訂單優先級,記賬員,備注,顧客編號)
主碼:訂單編號
外碼:顧客編號,為引用顧客表的顧客編號
關系:顧客簽約訂單
6.訂單明細表(零件編號,訂單編號,供應商編號,零件數量,訂單明細價格,折扣,備注)
主碼:訂單編號
外碼:訂單編號,供應商編號,供應商編號
關系:訂單填寫訂單明細表
7. 零件表(零件編號,零件名稱,制作商,品牌,零售價格,備注)
主碼:零件編號
外碼:制作商引用供應商表的供應商名稱
關系:供應商提供零件
8. 零件供應商聯系表(零件編號、可用數量、供應價格、供應商編號、備注)
主碼:零件編號,供應商編號
關系:零件與供應商的聯系表
1)確定關系模式是否是第三范式的:
經分析:地區、國家、顧客、供應商、訂單、訂單明細、零件都是一個主碼,沒有部分依賴和傳遞依賴。屬於第三范式。
2)確定信息的完整性:
確定好關系模式的結構之后,接下來要分析一下這些關系模式是否滿足生成報表的信息需求。
該系統產生一個報表:零件供應商聯系表
分析如下:
零件供應商聯系表:內容包括:零件編號、可用數量、供應價格、供應商編號、備注。其中零件編號由零件表獲得。供應商編號由供應商獲得。
因此,所設計的關系模式滿足所有報表的信息要求。
至此,關系模式設計完成
(4)數據庫物理結構設計
根據上面設計物理結構
1. 地區表
列名 |
數據類型 |
主碼、外碼 |
說明 |
地區編號 |
Int |
主碼 |
地區編號 |
地區名稱 |
Varchar(30) |
否 |
地區名稱 |
備注 |
Varchar(30) |
否 |
Remarks |
2. 國家表
列名 |
數據類型 |
主碼、外碼 |
說明 |
國家編號 |
Int |
主碼 |
Country_id |
國家名稱 |
Varchar(20) |
否 |
Country_Name |
地區編號 |
Int |
外碼 |
Region_id |
備注 |
Varchar(30) |
否 |
Remarks |
3. 顧客表
列名 |
數據類型 |
主碼、外碼 |
說明 |
顧客編號 |
Int |
主碼 |
Customer_id |
顧客姓名 |
Varchar(20) |
否 |
Customer_name |
顧客地址 |
Varchar(20) |
否 |
Customer_Address |
顧客電話 |
Char(20) |
否 |
Customer_Tel |
國家編號 |
Int |
外碼 |
Country_id |
賬戶余額 |
Int |
否 |
Customer_remainder |
備注 |
Varchar(30) |
否 |
Remarks |
4. 供應商表
列名 |
數據類型 |
主碼、外碼 |
說明 |
|
供應商編號 |
Int |
主碼 |
Supplier_id |
|
供應商名稱 |
Varchar(20) |
否 |
Supplier_Name |
|
供應商地址 |
Varchar(20) |
否 |
Supplier_Address |
|
供應商電話 |
Varchar(20) |
否 |
Supplier_Tel |
|
國家編號 |
Int |
外碼 |
Supplier_nationality |
|
供應商賬戶余額 |
Int |
否 |
Supplier_money |
|
備注 |
Varchar(30) |
否 |
Remarks |
5. 訂單表
列名 |
數據類型 |
主碼、外碼 |
說明 |
訂單編號 |
Int |
主碼 |
Order_id |
訂單狀態 |
Varchar(20) |
否 |
Order_State |
訂單總價 |
Int |
否 |
Totalprice |
訂單日期 |
Date |
否 |
Order_data |
訂單優先級 |
Varchar(20) |
否 |
Priority |
記賬員 |
Varchar(20) |
否 |
Bookkeeper |
顧客編號 |
Int |
外碼 |
Customer_id |
備注 |
Varchar(30) |
否 |
Remarks |
6. 訂單明細表
列名 |
數據類型 |
主碼、外碼 |
說明 |
訂單明細編號 |
Int |
主碼 |
Order_drid |
訂單編號 |
Int |
外碼 |
Order_id |
零件編號 |
Int |
外碼 |
Part_Id |
供應商編號 |
Int |
外碼 |
Supplier_id |
零件數量 |
Int |
否 |
Part_number |
折扣 |
Float |
否 |
Discount |
稅率 |
Float |
否 |
Cess |
訂單明細價格 |
Float |
否 |
Order_ Price |
備注 |
Varchar(30) |
否 |
Remarks |
7. 零件表
列名 |
數據類型 |
主碼、外碼 |
說明 |
零件編號 |
Int |
主碼 |
Part_id |
零件名稱 |
Varchar(20) |
否 |
Part_name |
制作商 |
Varchar(20) |
否 |
Manufacture |
品牌 |
Varchar(20) |
否 |
Brand |
零售價格 |
Int |
否 |
Price |
備注 |
Varchar(30) |
否 |
Remarks |
8. 零件供應商聯系表
列名 |
數據類型 |
主碼、外碼 |
說明 |
零件編號 |
Int |
主碼 |
Part_id |
供應商編號 |
Int |
主碼 |
Supplier_id |
可用數量 |
Int |
否 |
Number |
供應價格 |
Int |
否 |
Supplier_price |
備注 |
Varchar(30) |
否 |
Remarks |
(5)數據庫模式SQL語句生成
create database 銷售應用數據庫 use 銷售應用數據庫 --1.地區表 CREATE TABLE 地區表 (地區編號 int PRIMARY KEY, 地區名稱 varchar(30), 備注 varchar(30)default '該地區無備注'); --默認無備注 --2.國家表 CREATE TABLE 國家表 (國家編號 int PRIMARY KEY, 國家名稱 varchar(20), 地區編號 int, 備注 VARCHAR(30) default'該國家無備注', FOREIGN KEY(地區編號) REFERENCES 地區表(地區編號)); --3.顧客表 CREATE TABLE 顧客表 (顧客編號 int PRIMARY KEY, 顧客姓名 varchar(20), 顧客地址 varchar(20), 顧客電話 char(20), 賬戶余額 int check(賬戶余額>0), 國家編號 int, 備注 varchar(20) default'該顧客無備注', FOREIGN KEY(國家編號) REFERENCES 國家表(國家編號)); --4.供應商表 CREATE TABLE 供應商表 (供應商編號 int PRIMARY KEY, 供應商名稱 varchar(20), 供應商地址 varchar(20), 供應商電話 varchar(20), 供應商賬戶余額 int check(供應商賬戶余額>0), 國家編號 int, 備注 varchar(30) default'該供應商無備注', FOREIGN KEY(國家編號) REFERENCES 國家表(國家編號)); --5. 訂單表 CREATE TABLE 訂單表 (訂單編號 int PRIMARY KEY, 顧客編號 int, 訂單狀態 varchar(20), 訂單總價 int, 訂單日期 DATE, 訂單優先級別 varchar(20), 記賬員 varchar(20), 備注 VARCHAR(100) default'該訂單無備注', FOREIGN KEY(顧客編號) REFERENCES 顧客表(顧客編號)); --7. 零件表 CREATE TABLE 零件表 (零件編號 int PRIMARY KEY, 零件名稱 varchar(20), 制作商 varchar(20), 品牌 varchar(20), 零售價格 int check(零售價格>0), 備注 VARCHAR(100)default'該零件表無備注'); --6. 訂單明細表 CREATE TABLE 訂單明細表 (訂單明細編號 int PRIMARY KEY, 訂單編號 int, 零件編號 int, 供應商編號 int, 零件數量 int not null, 折扣 float check(折扣>=0.00 and 折扣<=1.00), 稅率 float check(稅率>=0.00 and 稅率<=0.08), 訂單明細價格 float not null, 備注 VARCHAR(100)default'該訂單明細表無備注', FOREIGN KEY(訂單編號) REFERENCES 訂單表(訂單編號), FOREIGN KEY(零件編號) REFERENCES 零件表(零件編號), FOREIGN KEY(供應商編號) REFERENCES 供應商表(供應商編號) ); --8 零件供應商聯系表 CREATE TABLE 零件供應商聯系表 (零件編號 int, 供應商編號 int, 可用數量 int not null, 供應價格 int not null, 備注 VARCHAR(100), PRIMARY KEY(零件編號,供應商編號));
(6)數據庫行為設計
對於數據庫應用系統來說,最常用的功能就是安全控制功能、數據的增、刪、改、查功能以及報表的功能。本系統也應包含這些基本的操作。
1) 安全控制
把系統的用戶分為幾類:
系統管理員:擁有對系統的全部權限
顧客:擁有自己信息的查改等,購買零件訂單的權限
供應商:擁有對基本信息的維護權,提供零件
用戶:對數據的查詢權
在實現時,可將每一類用戶定義為一個角色,這樣在授權時只需對角色授權,而無須對每個具體的用戶授權。
2)數據操作功能:
增刪改查
數據錄入:對數據的錄入,比如對地區表操作
insert into 地區表(地區編號,地區名稱)values(1,'亞洲'); insert into 地區表(地區編號,地區名稱)values(2,'美洲'); insert into 地區表(地區編號,地區名稱)values(3,'澳洲'); select* from 地區表;
數據修改:對數據修改,比如修改地區表
update地區表 set地區編號=5,地區名稱='非洲'where地區編號=3;
數據刪除:對數據刪除,比如刪除地區表id=5
delete from 地區表 where地區編號=5;
查詢操作:對數據查詢,比如查詢地區表
select地區名稱 from地區表
7 實驗小結
通過本次實驗,我學習了數據庫設計,如何從0開始設計一個要使用的符合規范的數據庫。剛開始不知道怎樣做,隨着老師的教課和講解,以及和同學的討論,再結合自己所知道的知識和老師所發放下的課程內容,根據這些實際的情況,我對自己將要做的事也有了興趣和信心。
7個實體:零件、供應商、顧客、訂單、訂單明細、國家、地區。