You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Data-Science-For-Beginners/translations/mo/2-Working-With-Data/05-relational-databases
leestott 2e7dbcc041
🌐 Update translations via Co-op Translator
9 months ago
..
README.md 🌐 Update translations via Co-op Translator 9 months ago
assignment.md 🌐 Update translations via Co-op Translator 9 months ago

README.md

使用數據:關聯式資料庫

由 (@sketchthedocs) 繪製的手繪筆記
使用數據:關聯式資料庫 - @nitya 繪製的手繪筆記

你可能曾經使用過電子表格來存儲信息。電子表格由一組行和列組成,其中行包含信息(或數據),列描述信息(有時稱為元數據)。關聯式資料庫基於這種表格的核心原則,允許你在多個表格中分散存儲信息。這使得你可以處理更複雜的數據,避免重複,並在探索數據時擁有更大的靈活性。讓我們來探索關聯式資料庫的概念。

課前測驗

一切從表格開始

關聯式資料庫的核心是表格。就像電子表格一樣,表格是由列和行組成的集合。行包含我們希望處理的數據或信息,例如城市名稱或降雨量。列則描述它們存儲的數據。

讓我們開始探索,建立一個表格來存儲有關城市的信息。我們可以從城市名稱和國家開始。你可以將其存儲在如下表格中:

城市 國家
東京 日本
亞特蘭大 美國
奧克蘭 紐西蘭

注意,城市國家人口這些列名描述了存儲的數據,每一行都包含一個城市的信息。

單一表格方法的缺點

上述表格可能對你來說相當熟悉。現在讓我們開始向這個初具規模的資料庫添加一些額外的數據——年度降雨量以毫米為單位。我們將重點放在2018年、2019年和2020年。如果我們為東京添加數據可能會是這樣

城市 國家 年份 降雨量
東京 日本 2020 1690
東京 日本 2019 1874
東京 日本 2018 1445

你注意到我們的表格有什麼問題嗎?你可能會注意到我們不斷重複城市的名稱和國家。這可能會佔用大量存儲空間,而且多次複製是完全不必要的。畢竟,東京只有一個名字。

好吧,我們試試其他方法。讓我們為每一年添加新的列:

城市 國家 2018 2019 2020
東京 日本 1445 1874 1690
亞特蘭大 美國 1779 1111 1683
奧克蘭 紐西蘭 1386 942 1176

雖然這避免了行的重複,但也帶來了其他挑戰。我們每次新增一年都需要修改表格的結構。此外,隨著數據的增長,將年份作為列會使檢索和計算值變得更加困難。

這就是為什麼我們需要多個表格和關聯。通過分解數據,我們可以避免重複,並在處理數據時擁有更大的靈活性。

關聯的概念

讓我們回到數據,確定如何分解它們。我們知道需要存儲城市的名稱和國家,因此這可能最適合存儲在一個表格中。

城市 國家
東京 日本
亞特蘭大 美國
奧克蘭 紐西蘭

但在創建下一個表格之前我們需要弄清楚如何引用每個城市。我們需要某種形式的識別符、ID或在技術資料庫術語中主鍵。主鍵是一個用於識別表格中特定行的值。雖然這可以基於某個值本身例如我們可以使用城市的名稱但它幾乎總是應該是一個數字或其他識別符。我們不希望ID發生變化因為這會破壞關聯。你會發現在大多數情況下主鍵或ID通常是自動生成的數字。

主鍵通常縮寫為PK

cities

city_id 城市 國家
1 東京 日本
2 亞特蘭大 美國
3 奧克蘭 紐西蘭

在本課程中你會注意到我們交替使用“id”和“主鍵”這些術語。這些概念也適用於DataFrames你將在後續課程中進一步探索。雖然DataFrames不使用“主鍵”這一術語但你會注意到它們的行為非常相似。

有了城市表格後讓我們存儲降雨量。與其重複存儲城市的完整信息我們可以使用ID。我們還應確保新創建的表格也有一個id因為所有表格都應該有一個ID或主鍵。

rainfall

rainfall_id city_id 年份 降雨量
1 1 2018 1445
2 1 2019 1874
3 1 2020 1690
4 2 2018 1779
5 2 2019 1111
6 2 2020 1683
7 3 2018 1386
8 3 2019 942
9 3 2020 1176

注意新創建的rainfall表格中的city_id列。這一列包含引用cities表格中ID的值。在技術的關聯式數據術語中這被稱為外鍵;它是來自另一個表格的主鍵。你可以簡單地將其視為一個引用或指針。city_id 1指向東京。

[!NOTE] 外鍵通常縮寫為FK

檢索數據

將數據分成兩個表格後你可能會想知道如何檢索它。如果我們使用像MySQL、SQL Server或Oracle這樣的關聯式資料庫我們可以使用一種叫做結構化查詢語言SQL的語言。SQL有時讀作sequel是一種標準語言用於在關聯式資料庫中檢索和修改數據。

要檢索數據,你可以使用命令SELECT。其核心是,你選擇想要查看的列,它們所在的表格中檢索。如果你只想顯示城市的名稱,可以使用以下命令:

SELECT city
FROM cities;

-- Output:
-- Tokyo
-- Atlanta
-- Auckland

SELECT是列出列名的地方,FROM是列出表格名的地方。

[!NOTE] SQL語法對大小寫不敏感這意味著selectSELECT是相同的。然而根據你使用的資料庫類型列名和表名可能是大小寫敏感的。因此最佳做法是始終將編程中的所有內容視為大小寫敏感。在撰寫SQL查詢時常見的慣例是將關鍵字全部用大寫字母表示。

上述查詢將顯示所有城市。假設我們只想顯示紐西蘭的城市。我們需要某種形式的篩選器。SQL的關鍵字是WHERE,即“某些條件為真”。

SELECT city
FROM cities
WHERE country = 'New Zealand';

-- Output:
-- Auckland

數據聯結

到目前為止,我們已經從單一表格中檢索數據。現在我們希望將citiesrainfall中的數據結合起來。這可以通過聯結它們來完成。你將有效地在兩個表格之間創建一個接縫,並將每個表格中的列值匹配起來。

在我們的例子中,我們將匹配rainfall中的city_id列和cities中的city_id列。這將把降雨量值與其相應的城市匹配起來。我們要執行的聯結類型稱為內聯結,這意味著如果某些行與另一個表格中的任何內容不匹配,它們將不會顯示。在我們的例子中,每個城市都有降雨量,因此所有內容都將顯示。

讓我們檢索2019年所有城市的降雨量。

我們將分步進行。第一步是通過指示接縫的列來聯結數據——如前所述的city_id

SELECT cities.city
    rainfall.amount
FROM cities
    INNER JOIN rainfall ON cities.city_id = rainfall.city_id

我們已經突出顯示了我們需要的兩列,以及我們希望通過city_id聯結表格的事實。現在我們可以添加WHERE語句來篩選出僅2019年的數據。

SELECT cities.city
    rainfall.amount
FROM cities
    INNER JOIN rainfall ON cities.city_id = rainfall.city_id
WHERE rainfall.year = 2019

-- Output

-- city     | amount
-- -------- | ------
-- Tokyo    | 1874
-- Atlanta  | 1111
-- Auckland |  942

總結

關聯式資料庫的核心是將信息分成多個表格,然後將其重新組合以進行顯示和分析。這提供了高度的靈活性來執行計算或以其他方式操作數據。你已經了解了關聯式資料庫的核心概念,以及如何在兩個表格之間進行聯結。

🚀 挑戰

網絡上有許多關聯式資料庫可供使用。你可以通過使用上述技能來探索數據。

課後測驗

課後測驗

回顧與自學

Microsoft Learn上有多種資源可供你繼續探索SQL和關聯式資料庫的概念

作業

作業標題


免責聲明
本文件已使用 AI 翻譯服務 Co-op Translator 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。