本節介紹乙個樣例資料庫,這個資料庫在本書各個部分都可能用到。在學習將mysql投入工作時,這個資料庫為您提供了參考的例子。我們主要從前面描述過的兩種情形來給出例子:
■ 機構的秘書方案。我們需要一些比「機構」更為明確的資訊,所以現在就來構造乙個,它具有這樣一些特性:它由為了研究
美國歷史這個共同目的而聚集在一起的一群人組成(一時找不到更好的名稱,就暫且稱為美國歷史同盟)。在交會費的基礎上定期更新
各會員的資格。會費構成了此同盟的活動經費,如出版報紙「美國編年曆」。此聯盟也有乙個小web 站點,但開發出的功能不多。迄今這個站點只限於提供一些基本的資訊,如本團體的性質,負責人是誰,什麼樣的人可以參加等。
■
學分保持方案。在學分時段中,需要管理被測試者、記錄得分並賦予得分等級。然後確定最後的得分等級,將其與出勤率一道交給學校辦公室。現在讓我們根據如下兩個要求來進一步考慮這些情況:
■ 必須確定希望從資料庫中得到什麼資訊,即,希望達到什麼目的。
■ 必須計畫好要向資料庫輸入什麼,即將要儲存什麼資料。或許,在考慮向資料庫輸入什麼資料以前,逆向考慮一下需要從資料庫輸出什麼資料。在能夠對資料進行檢索前,必須將資料送入資料庫。但是,使用資料庫的方法是受您的目標驅動的,這些方法與希望從資料庫取出何種資訊的關係較之與向資料庫輸入何種資訊的關係更為緊密。除非打算以後使用這些資訊,否則肯定不會浪費時間和精力將它們輸入資料庫。
1.2.1美國歷史同盟這個方案的初期狀況是您作為同盟的秘書,利用字處理文件
維護■ 希望能夠利用該姓名位址錄產生不同格式的輸出,並且只給出相應用途所需的
資訊。目標之一是生成每年的列印姓名位址錄,這是該同盟過去就需要的,您打算繼續列印。除此之外,可以設想將姓名位址錄中的資訊派一些別的用途,如在同盟的年度宴會上
所提供的節目單中給出乙個當前的會員清單。這個應用涉及不同的資訊集合。列印的姓名位址錄中使用了每個會員條目的所有內容。而對於宴會節目單,只需要取出會員名字即可(如果採用字處理器要做到這一點有時是不太容易的)。
■ 希望搜尋姓名位址錄查詢其條目滿足某些條件的會員。例如,希望知道哪些會員不久就需要更新其會員資格。另外涉及搜尋的應用是由於需要
維護每個會員的關鍵字列表而產生的。這些關鍵字描述了每個會員特別感興趣的美國歷史的某個方面(如內戰、經濟蕭條、公民權利或托馬斯·傑佛遜的生活等)。會員們有時會向您要乙份與他們自己有類似愛好的會員的清單,您一定樂於滿足他們的這種要求。
■ 希望讓姓名位址名錄在同盟的web 站點上聯機使用。這對會員和您都是很有好處的。如果您能夠將姓名位址錄用某種合適的自動過程轉換為web 頁,則這個姓名位址錄的聯機版就可以一種比列印版更及時的方式保持最新資訊。而且如果能使這個聯機姓名位址錄可供搜尋,那麼會員就能夠自己方便地查詢資訊了。例如,某個會員希望知道其他對內戰感興趣的會員,他就可以自己將這些會員找出而不用請您幫他查詢,而您也不用花時間去做這件事了。我們清楚地知道,資料庫並不是世界上最令人激動的東西,因此,我們也不打算狂熱地
聲稱,使用資料庫可以促進創造性的思維。但是,當您停止將資訊視為某種必須與之搏鬥的東西(在用字處理文件時確實是這樣的),並開始將其想像為某種可以相對容易地操縱的事物(正如希望用mysql所做到的那樣)時,您提出某種使用或表示資訊的新方法的能力將會得到某種程度的解放,例如下面這些例子就是一些新方法:
工作了,這樣有助於使姓名位址錄中的資訊更為準確。
■ 如果您在資料庫中儲存email 位址,那麼可以利用它們來傳送email 給那些相當長的一段時間沒有更新自己的條目的會員。發出的訊息可以向這些會員顯示他們的條目內容,請他們檢視,然後指示怎樣利用web 站點提供的實用工具做所需的修改。
■ 資料庫不僅以關聯到會員表的方式幫助使web 站點更為有用。比方說,同盟出版了乙份報紙「美國編年史」,每一期中都有乙個給
小孩子的版面,內含歷史試題。最近有幾期主要集中在美國**的傳記上。同盟的web 站點也可以包含給孩子的版面,這樣使試題聯機。通過放置從資料庫中取出的試題並讓web 伺服器對隨機給出的問題進行查詢,或許甚至可以使這個版面成為互動式的。
至此,您可能已經想起了許多資料庫的用途,這使您有點不能自控了。在回到現實之前,您開始問一些特殊的問題:
■ 這是不是有點野心勃勃了?在
準備時是不是要做大量的工作?當然,如果只是想而不去做,則任何事情都很簡單,我並不偽稱上述所有事情實現起來都是微不足道的。然而,在本書結束時,我們所描述的這些事都實現了。只需記住一件事,沒必要一次做完所有的事。我們將對工作進行分解,每次只做一部分。
■ mysql能夠完成所有這些事嗎?不,它不能夠。例如,mysql沒有直接的web 能力。雖然由mysql自身不能完成我們所討論的每樣事情,但是可以得到與mysql一起工作的工具,從而完善和擴充套件了mysql的能力。我們將用perl 指令碼語言和dbi(資料庫介面)perl 模組來編寫訪問mysql資料庫的指令碼。perl 具有極為出色的文字處理能力,它允許以一種高度靈活的方式處理查詢結果以產生各種格式的輸出。例如,我們可以用perl 來生成多資訊文字格式( rt f)的姓名位址錄,這是一種可被所有字處理器讀取的格式。我們也可以使用另一種指令碼語言php。php 特別適合於編寫web 應用,而且它與資料庫一起工作。這使得能從web 頁執行mysql查詢並生成包含資料庫查詢結果的新頁。php 與apache(世界上最流行的web 伺服器)一起工作得很好,這使得完成諸如給出乙個搜尋視窗並顯示搜尋結果之類的事情很容易。mysql與這些工具整合得很好,並向您提供了以自己的方式組合它們的靈活性,可以進行選擇以實現您的設想。不用受限於那些大肆推銷的所謂「整合」
功能而實際工作起來也只是彼此之間的固定組合。
■ 最後,有乙個大問題,那就是所有這些東西要花多少錢?首先,同盟的預算是有限的。回答是,大概什麼錢也不用花,這可能會令您吃驚。如果您熟悉一般的資料庫系統,就會知道,它們一般相當昂貴。但是, mysql一般是免費的。在某些環境下,確實不
需要許可證,而且如果使用者數量不限也只需花$200。(關於許可證的一般介紹請參閱前言,特定的細節可參閱mysql參考指南。)我們將使用的其他工具( perl、dbi、php、apache)也是免費的,因此,所有東西都考慮到了,可以相當
便宜地組成乙個有用的系統。開發這個資料庫的作業系統的選擇取決於您。我們介紹的所有軟體都可執行在unix 下,其中大多數可以執行在windows 下。作者推薦在unix 下執行mysql和其他工具。它們全都是發源於unix 下,然後才轉到windows的。這表示它們的windows 版本成熟期較短,尚未經過徹底的測試和使用。
現在,讓我們來考慮一下使用樣例資料庫的其他情形。
1.2.2
學分儲存方案
初步的想法是,作為乙個老師,有儲存學分的職責。老師希望將學分處理從學分簿上的手工操作轉到mysql上用電子表示。在此情形下,想從資料庫得到的是含在學分簿中的東西:
■ 對於每次測驗或測試,要記錄學分。對測試,將學分排序,以便能確定每個字元( a、b、c、d 和f)所代表等級的得分範圍。
■ 在學分時段結束時,計算每個學生的總得分,然後排序總的得分並根據它們確定得分等級。總的得分可能涉及權重計算,因為大概會希望使測試的得分比測驗和得分權重更大。
■ 在每個學分時段結束時,提供出勤資訊給學校辦公室。目的是避免手工排序和彙總學分及出勤率記錄。換句話說,希望mysql在學分時段結束時對學分排序並完成每個學生的總分和缺課數的計算。為了達到這個目的,需要班級中的學生名冊、每次測驗和測試的
分數以及學生缺課的日期。
1.2.3 樣例資料庫怎樣才能滿足需求
如果您對歷史同盟或學分儲存不太感興趣,可能會奇怪為什麼必須做這些例子呢?答案是這些樣例方案本身並不是目的,只是用它們說明利用mysql及其相關的工具能做什麼事。加上一點想像,您將會看到樣例資料庫的查詢怎樣應用到所希望解決的問題上。假設您在前面提到的牙科診所上班,將會在本書中看到許多牙科方面的查詢。例如,確定歷史同盟的哪些會員需要立即更新他們的會員資格,這是一件類似於確定哪些病人近來沒有來看牙醫的事情。兩者都是基於日期的查詢,因此,一但學會了編寫會員更新的查詢,便可以將該技術用來編寫更為感興趣的延誤的預約病人查詢。 0
給主人留下些什麼吧!~~
MySQL 安裝 乙個機器裝多版本的mysql
0.準備工作 先去下 對應版本的安裝包 zip,解壓到你的安裝目錄下 檔案根目錄下 新增my.ini配置檔案,內容如下 mysqld 設定3307埠 port 3307 設定mysql的安裝目錄 basedir d program files mysql mysql 5.7.32 winx64 設定...
React入門系列 6 渲染乙個列表頁
我們先做乙個用於渲染的mock資料。const data 複製 列表渲染有多種方式來進行,一般我們採用es6新的陣列方法map來進行,當然我也會寫乙個普通版本給你們看喲。import react,from react export default class index extends compon...
Mysq篇 了解Mysql(一)
in關鍵字和exists關鍵字select from a where a.idin select id from b 對外表a使用索引效率高,建議a為大表。select from a whereexists select from b where a.id b.id 對內表b使用索引效率高,建議b為...