更新時間:2020-02-19 09:54:33 來源:動力節(jié)點 瀏覽2660次
數(shù)據(jù)庫選型
首先,我們第一個想到的問題就是我們的數(shù)據(jù)要存在什么地方?
你可能會說,當然是硬盤上啊。這樣回答也沒有錯,硬盤的確是當下主要的存儲介質(zhì),不管是機械硬盤、固態(tài)硬盤、磁盤陣列。
然而,我們?nèi)绻苯泳幊滩僮鞔鎯橘|(zhì)那就太費勁了,于是人們發(fā)明了文件系統(tǒng)(也可以說是一種數(shù)據(jù)庫管理系統(tǒng))、數(shù)據(jù)庫管理系統(tǒng)(可能是基于文件系統(tǒng)的),它們都提供相應的編程接口(即API),這樣就能減輕數(shù)據(jù)庫應用的編程負擔。
但是,就目前來說,數(shù)據(jù)庫分很多種,文件系統(tǒng)、關(guān)系數(shù)據(jù)庫、NoSQL數(shù)據(jù)庫等等,而每一種類又有很多具體的數(shù)據(jù)庫產(chǎn)品,比如關(guān)系數(shù)據(jù)庫就有Oracle、MySQL等等。我們到底要選擇哪一種的哪一款產(chǎn)品呢?
嗯,這就是數(shù)據(jù)庫選型的問題。它取決于下面的幾個因素:
數(shù)據(jù)本身的特點,比如數(shù)據(jù)從哪產(chǎn)生的、產(chǎn)生的頻率多大、產(chǎn)生的數(shù)據(jù)是什么內(nèi)容,比如數(shù)字、文本、圖片、視頻、音頻、地理位置等;有的數(shù)據(jù)可以描述一個個現(xiàn)實的實體對象,有的數(shù)據(jù)描述的是實體對象的行為或者實體對象之間的關(guān)系;有的數(shù)據(jù)可以形成流,有的數(shù)據(jù)可以形成樹、圖等結(jié)構(gòu)。結(jié)構(gòu)化、半結(jié)構(gòu)化、非結(jié)構(gòu)化這三個概念也是描述數(shù)據(jù)本身的特點的。事實上,結(jié)構(gòu)化數(shù)據(jù)基本上可以等同于關(guān)系數(shù)據(jù),即可以提煉出表及其各個列(即實體及其各個屬性)。
人們使用數(shù)據(jù)的特點,是一次寫入數(shù)據(jù)后以后只讀不再更新,還是需要不斷更新該數(shù)據(jù),新增數(shù)據(jù)的頻率是多大,更新數(shù)據(jù)的頻率是多大,每次讀取、新增、更新的數(shù)據(jù)量是多少,數(shù)據(jù)的讀寫分布在某個局部范圍還是均勻分布,是單條處理居多還是批量處理居多,訪問聚合數(shù)據(jù)居多還是獨立數(shù)據(jù)居多,是每個數(shù)據(jù)操作獨立還是往往多個數(shù)據(jù)操作是一個整體,是同一個數(shù)據(jù)多個用戶需要訪問還是基本上一個數(shù)據(jù)就一個用戶訪問等等。
數(shù)據(jù)庫產(chǎn)品本身的許可類型(License)、價格、特性、性能、穩(wěn)定性、部署是否容易、擴容成本、運維成本等。
租房網(wǎng)應用的數(shù)據(jù)庫選型
目前租房網(wǎng)應用的數(shù)據(jù)主要有兩個,一個是用戶數(shù)據(jù),一個是房源數(shù)據(jù)。用戶數(shù)據(jù)主要是通過用戶注冊添加的,但目前租房網(wǎng)應用并沒有這個功能。房源數(shù)據(jù)也是用戶發(fā)布而添加的,租房網(wǎng)應用同樣還沒有這個功能。
很明顯,用戶和房源很容易映射到現(xiàn)實中的實體,一個用戶具有用戶名和密碼等屬性,一個房源具有位置、房主、其他具體情況等靜態(tài)信息(事實上,這些應該算是房產(chǎn)的屬性,房產(chǎn)只有在需要出租出去的時候才成為房源,房源應該是房產(chǎn)的其中某種狀態(tài),但我們先不用搞這么復雜,就先這么統(tǒng)一對待吧),以及發(fā)布時間、發(fā)布者等動態(tài)/行為信息。
它們都是用戶通過瀏覽器添加到我們的數(shù)據(jù)庫中的,數(shù)據(jù)量應該也不會太大。后續(xù)的數(shù)據(jù)訪問也主要是以讀操作為主,短時間內(nèi)訪問量也不會太大。當然這個跟你對應用的定位有關(guān),你如果希望應用迅速火爆起來,必然要實施各種營銷和推廣措施,這樣的話短時間內(nèi)數(shù)據(jù)量和訪問量可能快速增長。
既然如此,我們完全可以采用關(guān)系數(shù)據(jù)庫來解決數(shù)據(jù)的持久化問題。事實上,大多數(shù)Web應用都可以采用關(guān)系數(shù)據(jù)庫,或者至少先拿關(guān)系數(shù)據(jù)庫來嘗試一下,那些所謂的大數(shù)據(jù)只存在于少數(shù)巨頭互聯(lián)網(wǎng)公司。
另外,開發(fā)環(huán)境和測試環(huán)境、生產(chǎn)環(huán)境的數(shù)據(jù)庫應該不一樣。在開發(fā)環(huán)境,我們最好選擇不需要單獨部署數(shù)據(jù)庫服務器的數(shù)據(jù)庫產(chǎn)品,否則,開發(fā)受限太多,既要部署數(shù)據(jù)庫服務器,還受網(wǎng)絡情況等影響,單元測試也不容易做。
測試環(huán)境和生產(chǎn)環(huán)境的數(shù)據(jù)庫應該選擇同款數(shù)據(jù)庫才對。
所以,在租房網(wǎng)應用的開發(fā)環(huán)境中,我選擇的是H2Database(可以參考這篇文章),直接在工程中添加它的一個JAR包即可。至于測試環(huán)境和生產(chǎn)環(huán)境,那就不作考慮了,畢竟它只是用來演示的,又不是真的要上線運營。
數(shù)據(jù)庫設計
選定好了數(shù)據(jù)庫,我們需要根據(jù)該數(shù)據(jù)庫產(chǎn)品進行設計。
簡單來說,對于關(guān)系數(shù)據(jù)庫,我們就是要設計數(shù)據(jù)庫中存在哪些表,每張表的各個列是什么,每個列的數(shù)據(jù)類型和約束是什么,是否要建立索引等等。
但事實上,要想進行數(shù)據(jù)庫設計,一般先要對我們的業(yè)務、數(shù)據(jù)進行分析,實際上也屬于需求分析的范疇。分析的方法也有很多,大家可以自行查閱相關(guān)資料。
當然,關(guān)系數(shù)據(jù)庫的設計形成了比較系統(tǒng)的理論,什么關(guān)系模型、關(guān)系代數(shù)、關(guān)系演算、三范式、完整性約束等等,這里就不再贅述了。
當然,數(shù)據(jù)庫設計可以采用文檔工具記錄下來,也可以采用所選定的數(shù)據(jù)庫管理系統(tǒng)直接設計,也可以采用專業(yè)的第三方產(chǎn)品比如PowerDesigner等。
而設計也會有相應的方法論、理論、原則、規(guī)范等,這個也需要經(jīng)過學習、實踐、思考、總結(jié)等成長四步而沉淀到個人的,這里也不再贅述了。
一句話,方法論和工具都很重要。
租房網(wǎng)的數(shù)據(jù)庫設計
至于我們的租房網(wǎng),我們就繼續(xù)采用簡單、夠用為原則,目前涉及到的數(shù)據(jù)就是用戶數(shù)據(jù)和房源數(shù)據(jù),那就設計用戶表和房源表。
用戶表設計三個列,一列是用戶ID,一旦生成就不再變;一列是用戶名;一列是密碼。三個列都是字符串類型,但長度可以限制在某個固定長度,表的主鍵就是用戶ID。實際上密碼不能明文存儲到數(shù)據(jù)庫中,而是需要加密存儲。
房源表也設計三個列吧,分別是房源ID、房源名稱、房源詳情,也都是字符串類型,但房源詳情可以采用變長字符串,長度可以大一些,200、500都可以,但也不可過大,表的主鍵是房源ID。
這都是粗略的設計,僅用作演示我們開發(fā)基于數(shù)據(jù)庫的應用是需要這么一步的,并不符合現(xiàn)實的需求,如果有需要,后面可以改進以符合現(xiàn)實的需求。
在測試環(huán)境和生產(chǎn)環(huán)境中,往往需要由數(shù)據(jù)庫管理員(即DBA)來建立數(shù)據(jù)庫、數(shù)據(jù)表,分配相應的權(quán)限,包括數(shù)據(jù)庫用戶名和密碼,甚至是部署獨立的數(shù)據(jù)庫服務器。
在開發(fā)環(huán)境中,一般是采用嵌入式的數(shù)據(jù)庫,建庫、建表、添加測試數(shù)據(jù)等都是自己執(zhí)行SQL腳本或編程來實現(xiàn)。
編寫訪問數(shù)據(jù)庫的代碼
這一步往往依賴于某個庫。
在Java中,JDBC是最常用的數(shù)據(jù)庫訪問API,而它僅僅是個接口規(guī)范,實際上還需要具體某個支持JDBC的數(shù)據(jù)庫產(chǎn)品提供的驅(qū)動包,它本質(zhì)上就包含JDBC各個接口的實現(xiàn)類。
還記得這篇文章中提到的接口的作用和使用模式嗎?
JDBC基本上也是遵從這種方式,上面的某個接口可以替換成JDBC中的某個接口,底下的實現(xiàn)類就是各個數(shù)據(jù)庫廠商提供的驅(qū)動里面相應于該接口的某個實現(xiàn)類,上面使用該接口的外部程序就是我們的Web應用程序了,它僅僅使用JDBC接口而已,但實際運行時需要配置一個具體的數(shù)據(jù)庫驅(qū)動(即JDBC的實現(xiàn)),這其實就是數(shù)據(jù)庫驅(qū)動加載,后面再詳細介紹。
當然,直接使用JDBC可能比較復雜,于是很多第三方廠商又將JDBC進行了封裝,比如Spring就提供了JDBCTemplate來簡化JDBC的操作,還有很多ORM(ObjectRelationalMapping,簡稱ORM,對象關(guān)系映射)框架也提供了某個方面的封裝,這些以后再詳細介紹。
數(shù)據(jù)庫相關(guān)視頻教程
oracle數(shù)據(jù)庫教程:http://www.dabaquan.cn/v22/
數(shù)據(jù)庫plsql教程:http://www.dabaquan.cn/v23/
jdbc數(shù)據(jù)庫教程:http://www.dabaquan.cn/v24/
數(shù)據(jù)庫mysql教程:http://www.dabaquan.cn/v21
Java實戰(zhàn)項目視頻之egov項目視頻教程【免費下載】:http://www.dabaquan.cn/v83/
Java學生成績管理系統(tǒng)視頻教程【免費下載】:http://www.dabaquan.cn/v51/
以上就是動力節(jié)點Java培訓機構(gòu)小編介紹的“應用的開發(fā)步驟,Java數(shù)據(jù)庫編程教程”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。