> For the complete documentation index, see [llms.txt](https://clu.gitbook.io/scrapbook/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://clu.gitbook.io/scrapbook/43-structured-unstructured-and-semi-structured-data.md).

# 4.4 Structured, Unstructured and Semi-structured Data

## 結構化資料 (Structured Data)

所謂的結構化資料基本上就是**定義精確的資料**, 比方說在MySQL中建立了一張table, 我們通常都會為table中的各個欄位去做定義, 固定的欄位, 固定的格式, 固定的順序與固定的佔用大小. 這類資料基本上就是很有條理的, 違規的資料基本上也進不了資料庫.

好處就是資料的定義明瞭清晰, 資料長相容易被預測. 當然這也意味著資料分析跟處理都相對容易多了, 這也是為什麼資料分析工具或是報表產生工具大多數都會優先採用結構化資料的原因之一.

## 非結構化資料 (Unstructured Data)

上面結構化都講那麼清楚了, 這邊就直接反過來就是了, 就是資料比較亂, **定義不明確**的意思. 像一段短片, 一張圖片, 一整坨純文字等等.

這邊的差異基本上是在指"格式", 不是資料的"用途".

## 半結構化資料 (Semi-structured Data)

這就是在結構化與非結構化之間的另一種資料, 你在這種資料裡面是**看得到欄位的, 所以還是可以透過欄位來查詢, 但其並不保證一致性**. 譬如在使用者資料表裡面, 可能只有某些資料才有"電話"這個欄位, 但有些資料是沒有的.

你可能會想到MySQL裡面設定成允許該欄位可以為Null, 但這邊的意思其實是"**不需要對結構做任何設定**", 因此就算使用者完全沒想過之後要加入什麼資料, 也可以直接加入一筆"Jackey的鼻子有幾個"這種資料.

可參考以下的XML:

```markup
<items>
    <item>
        <name>Jackey</name>
        <job>Actor</job>
        <weapon>Nose</weapon>
        <numberOfNoses>3</numberOfNoses>
        <price>9487</price>
    </item>
    <item>
        <name>Link</name>
        <job>N/A</job>
        <weapon>Sword</weapon>
        <colorOfColth>green</colorOfColth>
        <price>50</price>
    </item>
</items>
```

以這個XML來說, user可以準確地取出name的值, 同時也可以隨意追加任何欄位而不受限制.

故半結構化資料的好處是說, **可以收集變數很多或是難以預測的資料集合, 然而依然保有可查找的能力**. 以電商平台來說, 可能就會有各種商品並且有各種不同的欄位, 畢竟你如果賣遙控車, 他賣電腦桌, 那你們的資料欄位一定不會完全一樣, 甚至可能差很多. 這種情況就無法使用結構化資料了.
