|
|
1 month ago | |
|---|---|---|
| .. | ||
| README.md | 1 month ago | |
| assignment.md | 1 month ago | |
README.md
การทำงานกับข้อมูล: ฐานข้อมูลเชิงสัมพันธ์
![]() |
|---|
| การทำงานกับข้อมูล: ฐานข้อมูลเชิงสัมพันธ์ - Sketchnote โดย @nitya |
มีโอกาสที่คุณเคยใช้สเปรดชีตในอดีตเพื่อเก็บข้อมูล คุณมีชุดของแถวและคอลัมน์ โดยที่แถวเก็บข้อมูล (หรือข้อมูล) และคอลัมน์อธิบายข้อมูล (บางครั้งเรียกว่าข้อมูลเมตา) ฐานข้อมูลเชิงสัมพันธ์ถูกสร้างขึ้นบนหลักการพื้นฐานนี้ของคอลัมน์และแถวในตาราง ทำให้คุณสามารถมีข้อมูลกระจายอยู่ในหลายตารางได้ ซึ่งช่วยให้คุณทำงานกับข้อมูลที่ซับซ้อนมากขึ้น หลีกเลี่ยงการทำซ้ำ และมีความยืดหยุ่นในการสำรวจข้อมูล มาสำรวจแนวคิดของฐานข้อมูลเชิงสัมพันธ์กัน
แบบทดสอบก่อนบรรยาย
ทุกอย่างเริ่มต้นด้วยตาราง
ฐานข้อมูลเชิงสัมพันธ์มีแกนหลักเป็นตาราง เช่นเดียวกับสเปรดชีต ตารางคือการรวบรวมของคอลัมน์และแถว แถวเก็บข้อมูลหรือข้อมูลที่เราต้องการทำงานด้วย เช่น ชื่อเมืองหรือปริมาณฝนตก คอลัมน์อธิบายข้อมูลที่เก็บไว้
เรามาเริ่มต้นการสำรวจด้วยการสร้างตารางเพื่อเก็บข้อมูลเกี่ยวกับเมือง เราอาจเริ่มด้วยชื่อและประเทศ คุณสามารถเก็บข้อมูลนี้ในตารางดังนี้:
| City | Country |
|---|---|
| Tokyo | Japan |
| Atlanta | United States |
| Auckland | New Zealand |
สังเกตชื่อคอลัมน์ city, country และ population ที่อธิบายข้อมูลที่เก็บไว้ และแต่ละแถวมีข้อมูลเกี่ยวกับเมืองหนึ่งเมือง
ข้อจำกัดของวิธีการใช้ตารางเดียว
มีโอกาสที่ตารางข้างต้นดูคุ้นเคยกับคุณ ลองเพิ่มข้อมูลเพิ่มเติมในฐานข้อมูลที่กำลังเติบโตของเรา — ปริมาณฝนรายปี (เป็นมิลลิเมตร) เราจะเน้นปี 2018, 2019 และ 2020 หากเราเพิ่มข้อมูลสำหรับโตเกียว อาจดูเหมือนดังนี้:
| City | Country | Year | Amount |
|---|---|---|---|
| Tokyo | Japan | 2020 | 1690 |
| Tokyo | Japan | 2019 | 1874 |
| Tokyo | Japan | 2018 | 1445 |
คุณสังเกตอะไรเกี่ยวกับตารางของเรา? คุณอาจสังเกตว่าเรากำลังทำซ้ำชื่อและประเทศของเมืองซ้ำๆ นั่นอาจใช้พื้นที่เก็บข้อมูลมาก และไม่จำเป็นต้องมีสำเนาหลายชุดเลย เพราะโตเกียวมีชื่อเดียวที่เราสนใจ
โอเค ลองทำอย่างอื่นดู ลองเพิ่มคอลัมน์ใหม่สำหรับแต่ละปี:
| City | Country | 2018 | 2019 | 2020 |
|---|---|---|---|---|
| Tokyo | Japan | 1445 | 1874 | 1690 |
| Atlanta | United States | 1779 | 1111 | 1683 |
| Auckland | New Zealand | 1386 | 942 | 1176 |
แม้ว่าวิธีนี้จะหลีกเลี่ยงการทำซ้ำแถว แต่ก็เพิ่มความท้าทายอื่นๆ เราต้องแก้ไขโครงสร้างของตารางทุกครั้งที่มีปีใหม่ นอกจากนี้ เมื่อข้อมูลของเราเติบโต การมีปีเป็นคอลัมน์จะทำให้การดึงข้อมูลและคำนวณค่าทำได้ยากขึ้น
นี่คือเหตุผลที่เราต้องมีหลายตารางและความสัมพันธ์ โดยการแยกข้อมูลออก เราสามารถหลีกเลี่ยงการทำซ้ำและมีความยืดหยุ่นมากขึ้นในการทำงานกับข้อมูลของเรา
แนวคิดของความสัมพันธ์
กลับมาที่ข้อมูลของเราและกำหนดวิธีการแยกข้อมูล เรารู้ว่าเราต้องเก็บชื่อและประเทศของเมือง ดังนั้นสิ่งนี้น่าจะเหมาะสมที่สุดในตารางเดียว
| City | Country |
|---|---|
| Tokyo | Japan |
| Atlanta | United States |
| Auckland | New Zealand |
แต่ก่อนที่เราจะสร้างตารางถัดไป เราต้องหาวิธีอ้างอิงแต่ละเมือง เราต้องมีรูปแบบของตัวระบุ, ID หรือ (ในคำศัพท์ทางเทคนิคของฐานข้อมูล) กุญแจหลัก กุญแจหลักคือค่าที่ใช้ระบุแถวเฉพาะในตาราง แม้ว่าสิ่งนี้อาจขึ้นอยู่กับค่าตัวเอง (เช่น เราอาจใช้ชื่อเมือง) แต่มันควรจะเป็นตัวเลขหรือตัวระบุอื่นๆ เสมอ เราไม่ต้องการให้ id เปลี่ยนแปลงเพราะจะทำให้ความสัมพันธ์เสียหาย คุณจะพบว่าในกรณีส่วนใหญ่กุญแจหลักหรือ id จะเป็นตัวเลขที่สร้างขึ้นโดยอัตโนมัติ
✅ กุญแจหลักมักย่อว่า PK
cities
| city_id | City | Country |
|---|---|---|
| 1 | Tokyo | Japan |
| 2 | Atlanta | United States |
| 3 | Auckland | New Zealand |
✅ คุณจะสังเกตว่าเราใช้คำว่า "id" และ "กุญแจหลัก" สลับกันในบทเรียนนี้ แนวคิดที่นี่ใช้กับ DataFrames ซึ่งคุณจะได้สำรวจในภายหลัง DataFrames ไม่ใช้คำว่า "กุญแจหลัก" อย่างไรก็ตามคุณจะสังเกตว่าพฤติกรรมของมันคล้ายกันมาก
เมื่อเราสร้างตาราง cities แล้ว มาลองเก็บข้อมูลปริมาณฝนแทน แทนที่จะทำซ้ำข้อมูลเต็มของเมือง เราสามารถใช้ id ได้ เราควรแน่ใจว่าตารางที่สร้างขึ้นใหม่มีคอลัมน์ id ด้วย เพราะทุกตารางควรมี id หรือกุญแจหลัก
rainfall
| rainfall_id | city_id | Year | Amount |
|---|---|---|---|
| 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 |
สังเกตคอลัมน์ city_id ภายในตาราง rainfall ที่สร้างขึ้นใหม่ คอลัมน์นี้เก็บค่าที่อ้างอิงถึง ID ในตาราง cities ในคำศัพท์ทางเทคนิคของข้อมูลเชิงสัมพันธ์ นี่เรียกว่า foreign key; คือกุญแจหลักจากตารางอื่น คุณสามารถคิดว่ามันเป็นการอ้างอิงหรือชี้ไปยังข้อมูล city_id 1 อ้างอิงถึงโตเกียว
[!NOTE]
foreign key มักย่อว่า FK
การดึงข้อมูล
เมื่อข้อมูลของเราแยกออกเป็นสองตาราง คุณอาจสงสัยว่าเราจะดึงข้อมูลอย่างไร หากเราใช้ฐานข้อมูลเชิงสัมพันธ์ เช่น MySQL, SQL Server หรือ Oracle เราสามารถใช้ภาษาที่เรียกว่า Structured Query Language หรือ SQL SQL (บางครั้งออกเสียงว่า sequel) เป็นภาษามาตรฐานที่ใช้ดึงและแก้ไขข้อมูลในฐานข้อมูลเชิงสัมพันธ์
ในการดึงข้อมูล คุณใช้คำสั่ง SELECT โดยพื้นฐานแล้ว คุณ เลือก คอลัมน์ที่ต้องการดู จาก ตารางที่เก็บข้อมูลนั้น หากคุณต้องการแสดงชื่อเมืองเท่านั้น คุณสามารถใช้คำสั่งดังนี้:
SELECT city
FROM cities;
-- Output:
-- Tokyo
-- Atlanta
-- Auckland
SELECT คือที่ที่คุณระบุคอลัมน์ และ FROM คือที่ที่คุณระบุตาราง
[!NOTE]
ไวยากรณ์ SQL ไม่สนใจตัวพิมพ์เล็กหรือใหญ่ หมายความว่าselectและSELECTมีความหมายเหมือนกัน อย่างไรก็ตาม ขึ้นอยู่กับประเภทของฐานข้อมูลที่คุณใช้ คอลัมน์และตารางอาจแยกแยะตัวพิมพ์เล็กใหญ่ได้ ดังนั้นจึงเป็นแนวปฏิบัติที่ดีในการปฏิบัติต่อทุกอย่างในโปรแกรมมิ่งเหมือนกับว่ามันแยกแยะตัวพิมพ์เล็กใหญ่ เมื่อเขียนคำสั่ง SQL มักนิยมเขียนคำสำคัญเป็นตัวพิมพ์ใหญ่ทั้งหมด
คำสั่งข้างต้นจะแสดงเมืองทั้งหมด ลองนึกภาพว่าเราต้องการแสดงเฉพาะเมืองในนิวซีแลนด์ เราต้องมีตัวกรองบางอย่าง คำสำคัญ SQL สำหรับสิ่งนี้คือ WHERE หรือ "ที่บางอย่างเป็นจริง"
SELECT city
FROM cities
WHERE country = 'New Zealand';
-- Output:
-- Auckland
การรวมข้อมูล
จนถึงตอนนี้เราได้ดึงข้อมูลจากตารางเดียว ตอนนี้เราต้องการนำข้อมูลจากทั้ง cities และ rainfall มารวมกัน ซึ่งทำได้โดยการ join หรือรวมตารางเข้าด้วยกัน คุณจะสร้างรอยต่อระหว่างสองตาราง และจับคู่ค่าจากคอลัมน์ของแต่ละตาราง
ในตัวอย่างของเรา เราจะจับคู่คอลัมน์ city_id ใน rainfall กับคอลัมน์ city_id ใน cities ซึ่งจะจับคู่ค่าปริมาณฝนกับเมืองที่เกี่ยวข้อง ประเภทของ join ที่เราจะทำคือ inner join หมายความว่าหากแถวใดไม่ตรงกับข้อมูลจากตารางอื่น จะไม่แสดง ในกรณีของเรา ทุกเมืองมีข้อมูลปริมาณฝน ดังนั้นทุกอย่างจะถูกแสดง
มาดึงข้อมูลปริมาณฝนของปี 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
สรุป
ฐานข้อมูลเชิงสัมพันธ์เน้นการแบ่งข้อมูลระหว่างหลายตารางซึ่งจะนำกลับมารวมกันเพื่อแสดงและวิเคราะห์ ซึ่งให้ความยืดหยุ่นสูงในการคำนวณและจัดการข้อมูล คุณได้เห็นแนวคิดหลักของฐานข้อมูลเชิงสัมพันธ์ และวิธีการทำ join ระหว่างสองตาราง
🚀 ความท้าทาย
มีฐานข้อมูลเชิงสัมพันธ์มากมายบนอินเทอร์เน็ต คุณสามารถสำรวจข้อมูลโดยใช้ทักษะที่คุณได้เรียนรู้ข้างต้น
แบบทดสอบหลังบรรยาย
แบบทดสอบหลังบรรยาย
ทบทวน & ศึกษาด้วยตนเอง
มีแหล่งข้อมูลหลายแห่งบน Microsoft Learn สำหรับคุณที่จะศึกษาต่อเกี่ยวกับ SQL และแนวคิดฐานข้อมูลเชิงสัมพันธ์
- อธิบายแนวคิดของข้อมูลเชิงสัมพันธ์
- เริ่มต้นการสืบค้นด้วย Transact-SQL (Transact-SQL คือเวอร์ชันหนึ่งของ SQL)
- เนื้อหา SQL บน Microsoft Learn
การบ้าน
ข้อจำกัดความรับผิดชอบ:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษาอัตโนมัติ Co-op Translator แม้เราจะพยายามให้ความถูกต้องสูงสุด แต่โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาต้นทางถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลโดยผู้เชี่ยวชาญมนุษย์ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดใด ๆ ที่เกิดจากการใช้การแปลนี้
