iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 6
0
Software Development

SQL 30天手把手入門系列 第 6

Day6 - NoSQL 非關聯式資料庫

  • 分享至 

  • xImage
  •  

近二十年來,隨著網際網路的興起,每天人們生成的資訊量也越來越大。關聯式資料庫在原始設計時,就需清楚定義關聯、存取的資料類型。如此一來,在資料的擴展性方面就沒辦法跟上現實的需求。

試想,若一間商店原本定義的商品格式如下:

name price
ProductA 588

回傳的 json 格式如下:

{
    "name":"ProductA",
    "price":588
}

若今天商家想要在商品欄位中增加一個 種類 Category 的欄位,若用關聯式資料庫的話,你可能會需要執行以下操作。

  • 考量到日後有可能會有其他種類,應當新增一個「種類」資料表
  • 商品和種類的關聯要建立
  • 「商品」表單要新增如 CategoryId 的欄位
  • 原先舊有的商品要不要一同將 CategoryId 給補上?

此外,在後端的資料庫內還沒有將以上的步驟執行完前,任何有種類相關資料的商品,都沒有辦法成功寫入資料庫。

非關聯式資料庫的查詢邏輯像是當你想從圖書館找一本書時,你會先用關鍵字從圖書館的系統中找出對應的文件編號。接著,你憑藉著這個編號把對應的書從架上取下來,但是每本書的所含的內容類型並不一定相同。

非關聯式資料庫,類似的資料可以存在一個 Collection 中,裡頭的每一筆資料則是一個 Document。每筆 Document 本身是以類似 JSON 模式的 key-value pair 去儲存資料,而且每個 Document 間的 key 並不需要完全相同。

{
    "name":"ProductA",
    "price":588
}
{
    "name":"ProductB",
    "price":900,
    "rating":5
}

資料庫是可以同時允許這兩筆資料同時存在 Collection 中的,若你要再新增一筆如下的資料,也是沒問題的。

{
    "name":"ProductC",
    "price":588,
    "description":"This is description."
}

換言之,NoSQL 非關聯式資料庫可謂避免了「資料結構」問題,但相對犧牲了彼此資料的一致性。


上一篇
Day5 - SQL 敘述的撰寫注意事項
下一篇
Day7 - 今晚,你想來點 關聯 / 非關聯?
系列文
SQL 30天手把手入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言