iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0
自我挑戰組

初階面試常見題目彙整系列 第 23

初階面試常見題目回答-關聯式資料庫與SQL-鐵人賽第二十三日

  • 分享至 

  • xImage
  •  

任何一種可以儲存資料的系統都可以說是資料庫,
各位可能有用過程式讀取excel,
那麼讀取資料只能一列一列一欄一欄的查找,
如果要進行篩選判斷,等先找到一個值才能用他來判斷。

可以看到,
這個做為以具體行為來說是低階的作法,
而這個行為相當令程式開發者不方便。

而在管理資料庫中,
我想大家都用過SQL,
而它的全名為,
Structured query language (SQL)
language,沒錯,
他是一種程式語言,而且不會是向筆者一開始所提的Excel般,以具體行為來說是低階的。
中文全稱為結構化查詢語言,是一種常用於在關聯式資料庫中儲存和處理資訊的程式語言。

而是一種可以從結構上進行工作,不用去哪解實際存放方式,甚至在簡單的狀況下,
可以直接從語言上察覺他是做什麼,這是一種高階的程式語言。

結構化查詢語言,
那麼首先會先知道結構化資料,
結構化資料可分為三種類型:完全結構化、半結構化和非結構化。

完全結構化資料(Fully Structured Data)
每個表格有明確的欄位名稱,跟特定的數據類型,
如有一個欄位名稱為汽車型號,而數據類型為varchar。
最常見的就是關聯式資料庫,
組成的方式就是完全結構化。
除此之外Excel、CSV等等有包含明確的資料,
都是屬於完全結構化。

半結構化資料(Semi-Structured Data)
簡單來說就是介於完全結構化和非結構化資料之間的資料類型。
能確定他沒有完全結構化,但有一定的結構存在,
常見的就是XML、JSON、HTML,
就連Key,Value這種對應的關係,例如C#的Dictionary,
都是可以歸類於半結構化

非結構化資料(Unstructured Data)
簡單來說就是沒有明確結構和格式,
可以是一個字串、影像或是任何其他的data。

在了解過後會發現,許多人說SQL是關聯式資料庫,
但其實並不是,SQL是一種語言,
而造成這樣的原因,
就只是關聯式資料庫,用SQL的比例比較高。
只是使用頻率高到就像是google等於搜尋的代稱一般。

關於關聯式資料庫,可能聽過科德十二定律,
就如同SOLID一樣,這些都很重要,
盡可能能大部分符合就夠了,是一種大方向的原則。

細節部分筆者暫時不多作介紹,
主要常見的原子性、一致性、隔離性、持久性(ACID)。
看到這些可能會條件反應出第一正規化、第二、第三...,
而關聯式資料庫其中最大的特點就是資料間可以互相關聯。

基於結構化資料具有明確的資料結構和欄位,資料之間具有明確的關聯性

那麼優點
易於理解和存取,簡單來說,可以根據多個資料關聯起來,例如把client與server端的資料,基於Key值關聯起來,就可以一起看。
而為了保證資料可靠和正確,主要是透過綱要(Schema,又稱模式)來保證。

在更新的時候,有時候會同時更新多張表,
而如果沒有使用TRANSACTION,同時更新很多張表,
有時候會發生A表更新,B表沒更新,
那對於數據上的一致性也是極度不好,
所以為了確保資料的一致性,會使用TRANSACTION,這是一種TCL(Transaction Control Language)

而缺點也很明確,
固定的結構造成的複雜性,
靈活性不足、高延遲、擴展性困難
需要一定程度的部屬與管理等等

舉幾個例子來說明,
筆者曾有遇到更改結構的狀況,
而這個狀況的複雜性就以這個實際案例來說
為了好看清楚,
筆者這邊把空格 用成*標示。

某天筆者上司認為用varchar,
比較彈性且比較省空間,
就直接欄位從
chat(5)改成varchat(5),
資料就整個出現變化,
就像是1234*、變成1234。

這時候就開始出現一些問題,
如Key值已經存在,
或是更麻煩的沒有報錯正常通過,理應找到值卻找不到值。

而這兩件事情都是因為同樣的狀況發生的,
像是有些key會因為有無空格會是一樣的,
而通過查不到值,就是因為這兩個被判別為不一樣的參數等等。
可以看到這個更改會導致很複雜,而同理也難以去處理多樣的資料,靈活性也不高。

至於高延遲,
各位可能曾在作業系統學過"競爭條件"(Race Condition),
會知道有一個狀況會發生,
資料庫操作寫入、刪除、更新、新增,
如果同時有任兩個一起進行,
就很有可能出現問題,
而這就是所謂的高延遲。

當然也是有解決方式的,
就是把該表整個LOCK住,
除了會比較久導致浪費性能,
也會衍伸其他問題,
如常見的死結(Deadlock)

-----後言
筆者這邊原先預期要先寫其他文章,
不過由於資料放在其他地方,
物理上的限制,
改換先寫這一塊。
雖然筆者不說沒人察覺的到,
不過還請見諒。


上一篇
初階面試常見題目回答-敏捷開發-鐵人賽第二十二日
下一篇
初階面試常見題目回答-非關聯式資料庫介紹-Mongo-鐵人賽第二十四日
系列文
初階面試常見題目彙整30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言