破釜沉舟 http://www.7880.com
MySQL數據庫技術(shù)(03)文章類(lèi)別:MySQL 發(fā)表日期:2005-09-23
閱讀次數: 237
您可能會(huì )注意到,已經(jīng)讀了本書(shū)這么多頁(yè),但是還沒(méi)有看到幾句行話(huà)和術(shù)語(yǔ)。雖然我們大致提了一下怎樣利用樣例數據庫,但事實(shí)上,關(guān)于什么是“數據庫”,我們一點(diǎn)東西都還沒(méi)有介紹。不過(guò),我們現在打算設計該數據庫,然后開(kāi)始實(shí)現它,這樣就不能再避而不談數據庫術(shù)語(yǔ)了。介紹數據庫術(shù)語(yǔ)就是本節的目的。本節介紹的一些術(shù)語(yǔ)全書(shū)都要用到,因此必須對其熟悉。所幸的是,關(guān)系數據庫中的許多概念是相當簡(jiǎn)單的。事實(shí)上,關(guān)系數據庫的吸引力主要來(lái)源于其基本概念的簡(jiǎn)單性。
1.3.1 基本術(shù)語(yǔ)
在數據庫世界中,MySQL 歸類(lèi)為關(guān)系數據庫管理系統( R D B M S)。所謂關(guān)系數據庫管理系統的含義如下:
■ 數據庫(RDBMS 中的“D B”)是存儲信息的倉庫,以一種簡(jiǎn)單的、規則的方式進(jìn)行組織:
■ 數據庫中的數據集組織為表。
■ 每個(gè)表由行和列組成。
■ 表中每行為一個(gè)記錄。
■ 記錄可包含幾段信息;表中每一列對應這些信息中的一段。
■ 管理系統(“M S”)是允許通過(guò)插入、檢索、修改或刪除記錄來(lái)使用數據的軟件。
■ “關(guān)系”(“R”)一詞表示一種特殊種類(lèi)的D B M S,它通過(guò)尋找相互之間的共同元素使存放在一個(gè)表中的信息關(guān)聯(lián)到存放在另一個(gè)表中的信息。關(guān)系數據庫的能力在于它能夠從這些表中方便地取出數據,并將關(guān)聯(lián)各表中的信息相結合得出問(wèn)題的答案,這些答案只依據單個(gè)表的信息是不可能得到的。這里有一個(gè)例子,示出了關(guān)系數據庫怎樣將數據組織成表并將一個(gè)表中的信息與另一個(gè)表中的信息相關(guān)聯(lián)。假定您管理一個(gè)含有標題廣告服務(wù)的Web 站點(diǎn)。您與公司有協(xié)議,這些公司希望有人在拜訪(fǎng)您的站點(diǎn)上的網(wǎng)頁(yè)時(shí)顯示他們的廣告。每當一個(gè)拜訪(fǎng)者點(diǎn)擊您的頁(yè)面一次,您就向該拜訪(fǎng)者的瀏覽器提供了嵌在頁(yè)面中的廣告的一次服務(wù),并且給公司估算一點(diǎn)費
用。為了表示這些信息,要保存三個(gè)表(請參閱圖1 - 1)。一個(gè)是company 表,它含有公司名、編號、地址和電話(huà)號碼等列。另一個(gè)是ad 表,它列出廣告編號、擁有該廣告的公司的編號以及每次點(diǎn)擊時(shí)的計費數。第三個(gè)hit 表按廣告編號記錄廣告點(diǎn)擊次數以及廣告提供服務(wù)的日期。
利用單個(gè)表的信息可以回答某些問(wèn)題。為了確定簽協(xié)議的公司數目,只需對company 表中的行數計數即可。類(lèi)似地,為了確定某個(gè)給定時(shí)間段中的點(diǎn)擊次數,只需查看hit 表即可。其他問(wèn)題要更為復雜一些,而且必須考慮多個(gè)表以確定答案。例如,為了確定P i c k l e s .公司的每個(gè)廣告在7月1 4日點(diǎn)擊了多少次,應該按如下步驟使用這些表:
1) 查詢(xún)company 表中的公司名(Pickles, Inc)以找到公司編號( 1 4)。
2) 利用公司編號查找ad 表中匹配的記錄以便能夠確定相關(guān)的廣告編號。有兩個(gè)這樣的廣告,48 和1 0 1。
3) 對ad 表中匹配的每個(gè)記錄,利用該記錄中的廣告編號查找hit 表中在所需日期范圍內的匹配記錄,然后對匹配的記錄進(jìn)行計數。廣告編號為48 的匹配記錄有三個(gè),廣告編號為101 的匹配記錄有兩個(gè)。聽(tīng)起來(lái)很復雜!而這正是關(guān)系數據庫系統所擅長(cháng)的。這種復雜性在某種程度可以說(shuō)是一種幻覺(jué),因為上述每一步只不過(guò)是一個(gè)簡(jiǎn)單的匹配操作,它通過(guò)將一個(gè)表的行中的值與另一個(gè)表的行中的值相匹配,把一個(gè)表與另一個(gè)表相關(guān)聯(lián)。這個(gè)簡(jiǎn)單的操作可以各種方式使用來(lái)回答各種各樣的問(wèn)題。每個(gè)公司有多少個(gè)不同的廣告?哪個(gè)公司的廣告最受歡迎?每個(gè)廣告帶來(lái)的收入是多少?當前記賬期中每個(gè)公司的總費用是多少?現在我們已經(jīng)介紹了關(guān)系數據庫的理論,足以理解本書(shū)其余部分了,我們不必探究第三范式、實(shí)體關(guān)系圖以及所有這一類(lèi)的東西。如果您確實(shí)需要了解這些東西,那就太令人恐怖了,而且這也不是地方。建議您從閱讀C.J.Date 和E . F.Codd 的某些書(shū)籍入手。
1.3.2 查詢(xún)語(yǔ)言術(shù)語(yǔ)
M y S Q L使用一種稱(chēng)為S Q L(Structured Query Language)的語(yǔ)言。SQL 是當今的標準數據庫語(yǔ)言,所有主要的數據庫系統都使用它。SQL 具有多種不同的語(yǔ)句,所有語(yǔ)句都是以一種不枯燥并有用的方式設計來(lái)與數據庫進(jìn)行交互的。正如其他語(yǔ)言一樣, SQL 在初次接觸時(shí)可能會(huì )令人感到有些古怪。例如,為了創(chuàng )建一個(gè)表,需要告訴MySQL 表結構應該是什么樣的。我們可能會(huì )根據圖表來(lái)想像一個(gè)表,但MySQL 不會(huì ),因此,在創(chuàng )建表時(shí)需要告訴MySQL 一些東西,如下所示:
如果您不熟悉SQL 語(yǔ)句,可能會(huì )對這樣的語(yǔ)句留下深刻的印象,但您不必以程序員的身份來(lái)學(xué)習怎樣有效地使用S Q L。如果逐步熟悉了SQL 語(yǔ)言之后,就會(huì )以一種不同的眼光來(lái)看待C R E ATE TABLE 語(yǔ)句,會(huì )認為它是一個(gè)有助于描述自己信息的伙伴,而不是一種奇怪的胡言亂語(yǔ)。
1.3.3 MySQL 的體系結構術(shù)語(yǔ)
在您使用MySQL 時(shí),實(shí)際正使用以下兩個(gè)程序,因為MySQL 采用的是客戶(hù)機/服務(wù)器體系結構:
■ 數據庫服務(wù)器是一個(gè)位于存放您的數據的機器上的程序。它監聽(tīng)從網(wǎng)絡(luò )上傳過(guò)來(lái)的客戶(hù)機的請求并根據這些請求訪(fǎng)問(wèn)數據庫的內容,以便向客戶(hù)機提供它們所要求的信息。
■ 客戶(hù)機是連接到數據庫服務(wù)器的程序,這些程序告訴服務(wù)器需要什么信息的查詢(xún)。MySQL 分發(fā)包包括服務(wù)器和幾個(gè)客戶(hù)機程序??筛鶕_到的目的來(lái)使用客戶(hù)機。最常用的客戶(hù)機程序為m y s q l,這是一個(gè)交互式的客戶(hù)機程序,它能發(fā)布查詢(xún)并看到結果。其他
的客戶(hù)機程序有: mysqldump 和m y s q l i m p o r t,分別轉儲表的內容到某個(gè)文件或將文件的內容導入某個(gè)表; mysqladmin 用來(lái)查看服務(wù)器的狀態(tài)并完成管理任務(wù),如告訴服務(wù)器關(guān)閉等。如果具有標準的客戶(hù)機不適合的應用,那么MySQL 還提供了一個(gè)客戶(hù)機編程庫,可以編寫(xiě)自己的程序??蛻?hù)機編程庫可直接從C 程序中調用,如果希望使用C 語(yǔ)言以外的其他語(yǔ)言,還有幾種其他的接口可用。
MySQL 的客戶(hù)機/服務(wù)器體系結構具有如下好處:
■ 服務(wù)器提供并發(fā)控制,使兩個(gè)用戶(hù)不能同時(shí)修改相同的記錄。所有客戶(hù)機的請求都通過(guò)服務(wù)器處理,服務(wù)器分類(lèi)辨別誰(shuí)準備做什么,何時(shí)做。如果多個(gè)客戶(hù)機希望同時(shí)訪(fǎng)問(wèn)相同的表,它們不必互相裁決和協(xié)商,只要發(fā)送自己的請求給服務(wù)器并讓它仔細確定完成這些請求的順序即可。
■ 不必在數據庫所在的機器上注冊。MySQL 知道怎樣在因特網(wǎng)上工作,因此您可以在任何位置運行一個(gè)客戶(hù)機程序,此客戶(hù)機程序可以連接到網(wǎng)絡(luò )上的服務(wù)器。距離不是問(wèn)題,可從世界上的任何地方訪(fǎng)問(wèn)服務(wù)器。如果服務(wù)器位于澳大利亞的某臺機器上,那么當您帶著(zhù)自己的便攜式電腦到冰島去旅行時(shí),仍然可以訪(fǎng)問(wèn)自己的數據庫。
這是否意味著(zhù)任何人只要連接到因特網(wǎng)就可以訪(fǎng)問(wèn)您的數據?答案是否定的。MySQL 含有一個(gè)靈活的安全系統,只允許那些有權限訪(fǎng)問(wèn)數據的人訪(fǎng)問(wèn)??梢员WC那些人只能夠做允許他們做的事?;蛟S記賬辦公室的Sally 能夠讀取和更新(修改)記錄,而服務(wù)臺的Phil 只能查看記錄??梢栽O置使用人員的權限。如果希望運行一個(gè)自含系統(獨立系統),只要設置訪(fǎng)問(wèn)權限使客戶(hù)機只能從服務(wù)器運行的主機上進(jìn)行連接即可。
破釜沉舟 http://www.7880.com