什麼是SQL?什麼是NOSQL? 用簡單範例看一下他們的差異
文章推薦指數: 80 %
SQL (結構化查詢語言) 是用於和關聯式資料庫溝通的語言,它用在資料庫中 ... 套件,以及使用特定的函式操作,但如果是使用另一個NoSQL資料庫,像是Firebase,那就需要 ...
返回文章列表
什麼是SQL?什麼是NOSQL?用簡單範例看一下他們的差異
資料庫
當你想要學習一項新技術時,資料庫和SQL可能不是你首先想到的。
他看起來沒那麼潮,你可能會想到學習Python或R來進行資料分析。
或者是Swift來開發iOSAPP。
在過去的幾年裡,你可能也聽說過越來越流行的新技術NoSQL。
在大數據和資料分析的世界裡,資料庫和SQL比起以往任何時候都更重要。
如果你正準備開始設計一個Web應用程式,我相信你一開始大部分的時間會花在設計資料庫的架構上,而決定你的Web應用程式的速度和數據準確性最重要的指摽,就是你的如何設計資料庫的架構。
什麼是關聯式資料庫?
資料庫是一個有規則和序列,存放資料的集合,允許我們儲存和讀取資料。
目前有許多不同類型的資料庫技術,每個類型都有不同的儲存和讀取資料的方式,但到目前為止,最流行的還是關聯式資料庫。
在關聯式資料庫中,資料存儲在Table中,Table類似於Excel的表單,由欄和列組成的多個儲存格,Table中有一個唯一的key來標識每一行數據。
這些唯一的key可以用來將Table連接在一起。
正是這種結構使我們能夠辨識和存取資料,建立起資料庫中其他區塊之間的關係。
也正是這些關係,使得關聯式資料庫變得如此強大,並且在資料庫中提供資料的一致性。
SQL結構化查詢語言
SQL(結構化查詢語言) 是用於和關聯式資料庫溝通的語言,它用在資料庫中建立Table,以及從資料庫中新增、修改和刪除資料,串連Table之間的資料。
在工程師社群的問答平台Stackoverflow的調查中發現,SQL目前排名在程式語言的第三名,所以它是一個在開發人員中,普遍使用的程式語言,除了從Stackoverflow客觀的圖表分析,根據Ryan自己在業界工作的觀察,絕大多數的後端開發人員,不管你是使用哪一種程式語言,也都會使用SQL存取資料庫中的資料,所以很少有人只會Java,Ptyhon,C#程式語言,但不懂SQL程式語言的開發工程師。
SQL語法使用起來非常簡單,我們只要寫好Table名稱、要搜尋的欄位名稱以及搜尋條件就可以了,像是下方我想在資料庫中搜尋書名為「斜槓人生」的書,我只要用SQL關鍵字select後方寫下想要找出的欄位名稱,例如書名與出書年份,然後在關鍵字from後方寫上table名稱book,最後則是搜尋條件,而這樣簡單的語法可以在Oracle,MySQL,MSSQL等關聯式資料庫上執行。
關聯式資料庫系統
目前著名的資料庫系統有甲骨文Oracle、微軟MicrosoftSQLServer和MySQL。
這些資料庫都是關聯式資料庫,其中應用最廣泛的是MySQL。
事實上,最近對stackoverflow的調查發現,超過50%的工程師在職業生活中使用過MySQL,其重要程度可見一斑。
NoSQL資料庫
NoSQL是NotOnlySQL的縮寫,和剛才前面介紹的不同是,NoSQL資料庫是一種非關聯式資料庫,將資料儲存為類似JSON的文件,並對資料進行查詢,這是一個document資料庫模型,在這個模型中,資料並不存儲在Table中,doucment是key-value的有序集合。
資料庫中的每個doucment不需要具有相同的數據結構,你可以將資料儲存在JSON、XML文件甚至CSV文件,我下方使用紀錄書籍資訊的JSON格式作為範例,讓你更容易理解。
這是使用JSON格式紀錄的書籍資料,這裏有兩本書,分別是「斜槓青年」與「巴菲特寫給股東的信」,使用key-value的方式紀錄資料,像是書名的key值,就是title,value值就是「斜槓青年」,這樣我們在找資料時,只要搜尋key值title等於「斜槓青年」,就可以找到資料。
[
{
"year":2017,
"title":"斜槓青年",
"info":{
"release_date":"2017-09-01",
"rating":8.2,
"genres":["生涯規劃","商業理財"],
"plot":"全球職涯新趨勢,迎接更有價值的多職人生",
"actors":"SusanKuang"
}
},
{
"year":2017,
"title":"巴菲特寫給股東的信",
"info":{
"plot":"巴菲特親筆撰述唯一著作",
"rating":8.3
}
}
]
但是存取資料的方式,必須使用資料庫系統提供的API才能夠新增、修改、刪除資料,也就是需要透過程式語言呼叫特定的函式,或是使用資料庫系統提供的指令,遠端連線執行後才能存取資料,像是Amazon的雲端服務AWS,也有提供NoSQL的資料庫服務,名稱是DynamoDB,下面是一段使用Python程式語言搜尋「斜槓青年」這本書的簡單範例,其中最重要的是有中文「斜槓青年」這一行,搜尋的方式是使用Key物件,使用函式eq判斷書名是否相同,如果相同就會將書籍資料回傳,並且可以透過下面for迴圈一本一本找出來,列印出書名或其他相關資訊。
importboto3
fromboto3.dynamodb.conditionsimportKey
dynamodb=boto3.resource('dynamodb',endpoint_url='http://localhost:8000')
table=dynamodb.Table('Book')
response=table.query(KeyConditionExpression=Key('title').eq('斜槓青年'))
forbookinresponse['Items']:
print(book['title'])
NoSQL資料庫的優點是它們能夠處理大量的結構化或半結構化數據,更容易擴展,並且能夠提供高可用性。
使用NoSQL資料庫的一些好例子包括:事件記錄(例如存儲用戶登錄)、電子商務應用(存儲用戶購物車的數據)和即時的分析。
SQL與NoSQL的比較
雖然NoSQL資料庫與關聯式資料庫相比確實有一些優勢,但也有很多缺點。
數據一致性和數據完整性是NoSQL資料庫的主要問題,另一個缺點是缺乏標準化。
例如SQL語法適用於所有關聯式資料庫(MySQL、Oracle、MSSQL等),雖然一些特定的函式,語法上有些差異,但大致來說都是使用SQL的語法操作資料庫,而NoSQL資料庫沒有這樣的標準語言,不同的NoSQL資料庫之間存在很大的差異,剛才上面是使用AWSDynamoDB範例,我們需要匯入AWS的套件,以及使用特定的函式操作,但如果是使用另一個NoSQL資料庫,像是Firebase,那就需要匯入另一個套件和使用另一組函式來操作資料庫,所以學習SQL程式語言會是CP值更高的一種投資,因為你不用再另外花時間學習多個操作資料庫的方法。
在這個信息驅動的大數據時代,為你開發的系統選擇正確的資料庫,比以往任何時候都重要。
雖然關聯式資料庫已經存在了40多年,你可能會被"較新“的NoSQL資料庫技術所吸引,但有一些事情你需要考慮。
關係型資料庫提供的數據一致性和數據完整性意味著,如果你的系統是處理金融信息和交易,那麼數據一致性是必須的。
如果你希望你的資料庫是安全的,關聯式資料庫提供的安全功能,在這方面有明顯的優勢,而且你只需要學習10~20條簡單的SQL語法,就能夠操作大部分的資料庫數據。
所有這些都意味著,使用關係型資料庫和SQL是至關重要的。
關係型資料庫長期以來一直位居第一是有很好的原因的,90%的時間裡它們都是最好的選擇,而且這種情況不會很快改變,如果你有興趣學習更多關於SQL的知識。
可以看看我的課程《資料庫設計-有效的使用系統資料》。
這堂課程幫助許多初學者學會SQL語法,也受到許多同學的好評,課程中使用MySQL作為課程示範,相信這堂課程會成為你學習資料庫和資料分析的重要基石。
資料庫設計課程連結:https://hahow.in/cr/database
CodeGym致力於創造實用的高品質線上課程,幫助想要學習程式語言和IT技術的朋友,能透過我們的課程,學習相關知識,創造出屬於你自己的作品
瀏覽所有課程
作者
Ryan
CodeGym創辦人/講師
熟悉Java,Python等多種程式語言,在IT產業經歷十多年,善於資料分析、機器學習,並且熱衷於將資訊技術應用在不同產業分析和系統開發當中
追蹤CodeGym
最新文章
全世界前100大公司資料視覺化圖表
什麼是SQL?什麼是NOSQL?用簡單範例看一下他們的差異
Repl.it線上程式開發服務
文章分類
全部分類
java
程式語言
資料庫
資料視覺化
資訊科學專題分享
Java程式語言從0到1
這堂課程將以實際開發系統來做為教學的目標,課程教學過程將由淺入深教同學開發系統的完整流程,上完這個課程之後將具備使用Java程式語言開發軟體系統的能力
了解課程
資料庫設計
完成這堂課程後,你將學會資料庫設計正確的基礎觀念和完整的SQL語法知識,搭配Ryan製作的課程【Python基礎課程和網路爬蟲入門實戰】,將你學習到的資料庫技能將再次升級
了解課程
JoinOurFreeTrial
Getstartedtodaybeforethisonceinalifetimeopportunityexpires.
延伸文章資訊
- 1设计数据库的结构 - Firebase
该数据库与SQL 数据库不同,没有表格或记录的概念。当您将数据添加至JSON 树时,它会变为现有JSON 结构中的一个节点,带有一个关联的键。
- 2瞭解firebase JSON 資料庫| 他山教程,只選擇最優質的自學材料
在我們弄清楚程式碼之前,我覺得有必要了解資料如何儲存在firebase 中。與關聯式資料庫不同,firebase 以JSON 格式儲存資料。將關聯式資料庫中的每 ...
- 3[資料庫] SQL 與NoSQL 的用法 - 資訊吐司- 痞客邦
不是要來取代SQL,反而是合作,非關聯式資料庫處理大數據很有效率。 常見的: MongoDB、Firebase 等等。 採集Collection = 資料表Table.
- 4認識Firebase
Realtime Database 是許多APP 應用開發者使用Firebase 的最重要原因,但它本. 身與大多數開發者熟練的關聯式資料庫SQL 有很大的不同。 因為要讓APP 開發者直接使用...
- 5Firebase初探(1)- 安裝與設定
有別於傳統關聯式資料庫,NoSQL(Not Only SQL)代表的是分散式非關聯式資料 ... Firebase提供的服務中,Realtime Database可以透過JSON格式的存取, ...