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