พีชคณิตเชิงสัมพันธ์ในระบบจัดการฐานข้อมูล พร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

พีชคณิตเชิงสัมพันธ์ในระบบจัดการฐานข้อมูล (DBMS) เป็นภาษาการสอบถามเชิงกระบวนการที่รับความสัมพันธ์เป็นอินพุตและสร้างความสัมพันธ์ใหม่เป็นเอาต์พุต โดยจะจัดกลุ่มตัวดำเนินการออกเป็นประเภทเอกภาค เซต และทวิภาค ซึ่งเป็นรากฐานทางทฤษฎีที่กลไก SQL แปลงเป็นแผนการสอบถามที่สามารถดำเนินการได้

  • 🔍 เริ่มต้นด้วยตัวดำเนินการเอกภาค: คำสั่ง SELECT, PROJECT และ RENAME ใช้สำหรับกรองแถว เลือกคอลัมน์ และเปลี่ยนชื่อแอตทริบิวต์ในความสัมพันธ์เดียว
  • 📚 นำทฤษฎีเซตมาใช้: ยูเนียน อินเตอร์เซกชัน ดิฟเฟอเรนซ์ และคาร์ทีเซียนโปรดักต์ ผสานความสัมพันธ์ที่เข้ากันได้กับยูเนียนเข้าด้วยกันเพื่อสร้างผลลัพธ์ใหม่
  • 🔗 เข้าร่วมโดยตั้งใจ: การเชื่อมต่อแบบ Theta, Equi และ Natural จัดการกับการจับคู่ภายใน ในขณะที่การเชื่อมต่อแบบ Left, Right และ Full Outer จะเก็บทูเปิลที่ไม่ตรงกันพร้อมค่าว่างไว้
  • 📐 ใช้งานร่วมกับนาฬิกา: ตรวจสอบให้แน่ใจเสมอว่าจำนวนพารามิเตอร์ ชื่อแอตทริบิวต์ และโดเมนตรงกันก่อนดำเนินการเซตหรือยูเนียนใดๆ
  • 🤖 ใช้ AI ในการแปล: ผู้ช่วย AI จะแปลงนิพจน์พีชคณิตเป็น SQL อธิบายลำดับความสำคัญของตัวดำเนินการ และระบุเงื่อนไขการเชื่อมต่อที่ขาดหายไปโดยใช้ภาษาที่เข้าใจง่าย

พีชคณิตเชิงสัมพันธ์ใน DBMS

พีชคณิตเชิงสัมพันธ์คืออะไร?

พีชคณิตเชิงสัมพันธ์ SQL เป็นภาษาสอบถามเชิงกระบวนการที่รับอินสแตนซ์ของความสัมพันธ์เป็นอินพุตและส่งคืนอินสแตนซ์ใหม่ของความสัมพันธ์เป็นเอาต์พุต โดยจะใช้ชุดตัวดำเนินการคงที่ซ้ำๆ กับความสัมพันธ์หนึ่งหรือมากกว่า และผลลัพธ์ของตัวดำเนินการแต่ละตัวก็คือความสัมพันธ์ที่สามารถป้อนเข้าสู่การดำเนินการถัดไปได้ กลไกของ SQL อาศัยพีชคณิตนี้ในการวางแผนและดำเนินการสอบถาม

พีชคณิตเชิงสัมพันธ์พื้นฐาน Operations

ตัวดำเนินการพีชคณิตเชิงสัมพันธ์แบ่งออกเป็นสามกลุ่ม

เอกนารีสัมพันธ์ Operations

  • เลือก (σ)
  • โครงการ (π)
  • เปลี่ยนชื่อ (ρ)

Operaข้อเสนอแนะจากทฤษฎีเซต

  • สหภาพ (∪)
  • จุดตัด (∩)
  • ความแตกต่าง (−)
  • ผลคูณคาร์ทีเซียน (×)

ไบนารีสัมพันธ์ Operations

  • สมัคร
  • หมวด

ส่วนด้านล่างนี้จะอธิบายการทำงานของแต่ละตัวดำเนินการ พร้อมตัวอย่างการใช้งาน

เลือก (σ)

การขอ SELECT การดำเนินการนี้จะเลือกกลุ่มย่อยของทูเปิลที่ตรงตามเงื่อนไขที่กำหนด สัญลักษณ์ซิกมา σ บ่งบอกว่า:

σp(r)

ที่ไหน σ คือผู้ดำเนินการ p คือเงื่อนไขเชิงประพจน์ และ r คือความสัมพันธ์ (ตาราง) คำสั่ง SELECT จะรักษารูปแบบตารางไว้และตัดแถวที่ไม่ตรงตามเงื่อนไขทิ้ง

1 ตัวอย่าง

σ topic = "Database" (Tutorials)

เลือกทูเปิลจาก สอน โดยที่หัวข้อเท่ากับ “ฐานข้อมูล”

2 ตัวอย่าง

σ topic = "Database" AND author = "guru99" (Tutorials)

เลือกทูเปิลจาก สอน โดยหัวข้อคือ “ฐานข้อมูล” และผู้เขียนคือ guru99

3 ตัวอย่าง

σ sales > 50000 (Customers)

เลือกทูเปิลจาก ลูกค้า ซึ่งมีมูลค่าการขายมากกว่า 50,000

การฉายภาพ (π)

การขอ การฉาย ตัวดำเนินการจะลบแอตทริบิวต์ทั้งหมดออกจากความสัมพันธ์อินพุต ยกเว้นแอตทริบิวต์ที่ระบุไว้ ทำให้ได้ชุดย่อยแนวตั้ง การฉายภาพยังช่วยกำจัดแถวที่ซ้ำกันซึ่งเกิดจากการลบด้วยping คุณลักษณะ สัญลักษณ์พาย π บ่งบอกถึงสิ่งนั้น

ตัวอย่าง: พิจารณาตารางต่อไปนี้

รหัสลูกค้า ชื่อลูกค้า สถานะ
1 Google ใช้งาน
2 Amazon ใช้งาน
3 แอปเปิ้ล เฉื่อยชา
4 อาลีบาบา ใช้งาน

การคาดการณ์โดยอิงจากชื่อลูกค้าและสถานะ:

π CustomerName, Status (Customers)
ชื่อลูกค้า สถานะ
Google ใช้งาน
Amazon ใช้งาน
แอปเปิ้ล เฉื่อยชา
อาลีบาบา ใช้งาน

เปลี่ยนชื่อ (ρ)

การขอ ตั้งชื่อใหม่ ตัวดำเนินการ (operator) คือการดำเนินการแบบเอกภาค (unary operation) ที่กำหนดชื่อใหม่ให้กับแอตทริบิวต์ (หรือให้กับความสัมพันธ์ทั้งหมด) ตัวอย่างเช่น ρ(a/b) R เปลี่ยนชื่อแอตทริบิวต์ b ของความสัมพันธ์ R ไปยัง aฟังก์ชัน Rename มีประโยชน์อย่างยิ่งเมื่อคุณต้องการทำการเชื่อมตารางตัวเอง หรือเชื่อมตารางสองตารางที่มีชื่อแอตทริบิวต์เหมือนกัน

สหภาพ Operation (∪)

การขอ ยูเนี่ยน ตัวดำเนินการ ซึ่งแสดงด้วย ส่งคืนทุกทูเปิลที่ปรากฏในความสัมพันธ์ A หรือความสัมพันธ์ B โดยจะลบรายการที่ซ้ำกันออกโดยอัตโนมัติ

Result ← A ∪ B

เพื่อให้การสมรสมีผลสมบูรณ์:

  • A และ B ต้องมีจำนวนแอตทริบิวต์เท่ากัน (arity เท่ากัน)
  • โดเมนแอตทริบิวต์ที่เกี่ยวข้องต้องเข้ากันได้
  • ระบบจะลบทูเพิลที่ซ้ำกันออกโดยอัตโนมัติ

ตัวอย่าง. พิจารณาตารางสองตารางนี้:

ตาราง A ตาราง B
คอลัมน์ 1 คอลัมน์ 2 คอลัมน์ 1 คอลัมน์ 2
1 1 1 1
1 2 1 3

A ∪ B ให้:

คอลัมน์ 1 คอลัมน์ 2
1 1
1 2
1 3

ผลต่างเซต (−)

เครื่องหมายลบหมายถึง ความแตกต่างที่กำหนดไว้. ผลลัพธ์ของ A − B เป็นความสัมพันธ์ที่ประกอบด้วยทูเปิลทั้งหมดที่อยู่ใน A แต่ไม่อยู่ใน B

  • A และ B ต้องเข้ากันได้ในสหภาพแรงงาน
  • ชื่อแอตทริบิวต์และโดเมนต้องสอดคล้องกัน

ตัวอย่าง: A − B

คอลัมน์ 1 คอลัมน์ 2
1 2

จุดตัด (∩)

การขอ การตัด ตัวดำเนินการ ซึ่งแสดงด้วย กำหนดความสัมพันธ์ที่ประกอบด้วยทุกทูเปิลที่ปรากฏทั้งใน A และ B โดยที่ A และ B ต้องเข้ากันได้กับยูเนียน

คำจำกัดความเชิงภาพของจุดตัด

คำจำกัดความเชิงภาพของจุดตัด

ตัวอย่าง: A ∩ B

คอลัมน์ 1 คอลัมน์ 2
1 1

ผลคูณคาร์ทีเซียน (×) ในระบบจัดการฐานข้อมูล (DBMS)

การขอ ผลิตภัณฑ์คาร์ทีเซียน การรวมทูเปิลทุกตัวจากความสัมพันธ์หนึ่งเข้ากับทูเปิลทุกตัวจากอีกความสัมพันธ์หนึ่ง โดยการรวมคอลัมน์เข้าด้วยกัน ผลลัพธ์ที่ได้เพียงอย่างเดียวนั้นแทบจะไม่มีประโยชน์ แต่เมื่อรวมกับเงื่อนไข SELECT แล้ว มันจะกลายเป็นพื้นฐานของ JOIN เรียกอีกอย่างว่า ผลคูณไขว้ หรือ การเชื่อมต่อไขว้

ตัวอย่าง: σ คอลัมน์ 2 = '1' (A × B)

นิพจน์นี้จะส่งคืนทุกแถวของ A × B ใคร column 2 ค่าคือ 1

คอลัมน์ 1 คอลัมน์ 2
1 1
1 1

ร่วมเป็นผู้ขายกับเราที่ Operations

A ร่วม เป็นผลคูณคาร์ทีเซียนตามด้วยเงื่อนไขการเลือก การเชื่อมต่อจะแสดงด้วย สัญลักษณ์นี้ช่วยให้คุณสามารถรวมทูเปิลที่เกี่ยวข้องจากความสัมพันธ์ที่แตกต่างกันได้อย่างมีความหมาย

ประเภทของการเชื่อมต่อ (Join):

  • ข้อต่อภายใน: การเชื่อมต่อแบบ Theta, การเชื่อมต่อแบบ Equi, การเชื่อมต่อแบบ Natural
  • ข้อต่อภายนอก: การเชื่อมต่อแบบซ้าย ขวา และแบบเต็มภายนอก

การเข้าร่วมภายใน

ใน เข้าร่วมภายในเฉพาะทูเปิลที่ตรงตามเกณฑ์การจับคู่เท่านั้นที่จะถูกนำมาพิจารณา ส่วนที่เหลือจะถูกทิ้งไป

ธีต้าเข้าร่วม

รูปแบบทั่วไปของคำสั่ง JOIN คือ ธีต้าเข้าร่วมซึ่งแทนด้วยสัญลักษณ์ θ การเชื่อมต่อแบบ Theta join สามารถใช้เงื่อนไขการเปรียบเทียบใดๆ ก็ได้ในเกณฑ์การเลือก

A ⋈θ B

ตัวอย่างเช่น:

A ⋈ A.column 2 > B.column 2 (B)
คอลัมน์ 1 คอลัมน์ 2
1 2

อีควิ จอยน์

เมื่อการเชื่อมต่อแบบ Theta ใช้เงื่อนไขความเท่าเทียมกันเท่านั้น มันจะกลายเป็น อีควิ จอยน์.

A ⋈ A.column 2 = B.column 2 (B)
คอลัมน์ 1 คอลัมน์ 2
1 1

การต่อแบบ Equi join เป็นหนึ่งในรูปแบบการต่อไม้ที่นิยมใช้มากที่สุด และ อาร์ดีบีเอ็มเอส โดยทั่วไปแล้ว ตัวเพิ่มประสิทธิภาพการสืบค้นจะทุ่มเทความพยายามอย่างมากในการทำให้การสืบค้นมีประสิทธิภาพมากขึ้น

การรวมแบบธรรมชาติ (⋈)

A เข้าร่วมอย่างเป็นธรรมชาติ จำเป็นต้องมีคุณลักษณะ (คอลัมน์) ร่วมกันระหว่างความสัมพันธ์ คุณลักษณะที่ใช้ร่วมกันต้องมีชื่อและโดเมนเดียวกัน ผลลัพธ์จะมีคอลัมน์ที่ตรงกันเพียงหนึ่งสำเนา

พิจารณาตารางสองตารางนี้

ตาราง C
หนุ่ม สี่เหลี่ยมด้านเท่า
2 4
3 9
ตาราง D
หนุ่ม ลูกบาศก์
2 8
3 27

C ⋈ D ผลิต:

หนุ่ม สี่เหลี่ยมด้านเท่า ลูกบาศก์
2 4 8
3 9 27

การเข้าร่วมภายนอก

An การรวมภายนอก outer เก็บทูเปิลที่ตรงตามเกณฑ์การจับคู่ และ ทูเปิลที่ไม่มีค่า จะเติมคอลัมน์ที่ขาดหายไปด้วยค่า NULL

เข้าร่วมด้านนอกซ้าย (A ⟕ B)

การเชื่อมตารางแบบ Left Outer Join จะเก็บทุกทูเปิลในตารางด้านซ้ายไว้ หากแถวในตาราง A ไม่มีแถวที่ตรงกันในตาราง B ค่าแอตทริบิวต์ที่มาจากตาราง B จะถูกเติมด้วยค่า NULL

เข้าร่วมด้านนอกซ้าย

พิจารณาตารางต่อไปนี้:

ตาราง A
หนุ่ม สี่เหลี่ยมด้านเท่า
2 4
3 9
4 16
ตาราง B
หนุ่ม ลูกบาศก์
2 8
3 18
5 75

A ⟕ B ให้:

หนุ่ม สี่เหลี่ยมด้านเท่า ลูกบาศก์
2 4 8
3 9 18
4 16 NULL

การเชื่อมแบบ Right Outer Join (A ⟖ B)

การเชื่อมตารางแบบ Right Outer Join จะเก็บทุกทูเปิลไว้ในความสัมพันธ์ที่ถูกต้อง หากแถวในตาราง B ไม่มีแถวที่ตรงกันในตาราง A คอลัมน์ที่มาจากตาราง A จะถูกเติมด้วยค่า NULL

เข้าร่วมด้านนอกขวา

A ⟖ B ให้:

หนุ่ม ลูกบาศก์ สี่เหลี่ยมด้านเท่า
2 8 4
3 18 9
5 75 NULL

การเชื่อมต่อภายนอกแบบเต็ม (A ⟗ B)

การเชื่อมแบบ Full Outer Join จะเก็บทุกทูเปิลจากทั้งสองความสัมพันธ์ โดยไม่คำนึงว่าเงื่อนไขการเชื่อมตรงกันหรือไม่ ค่าที่หายไปในฝั่งใดฝั่งหนึ่งจะกลายเป็น NULL

A ⟗ B ให้:

หนุ่ม สี่เหลี่ยมด้านเท่า ลูกบาศก์
2 4 8
3 9 18
4 16 NULL
5 NULL 75

Operaสรุปข้อมูลอ้างอิง

ใช้ตารางอ้างอิงนี้เพื่อทบทวนหน้าที่ของแต่ละผู้ปฏิบัติงานได้อย่างรวดเร็ว

Operation (สัญลักษณ์) จุดมุ่งหมาย
เลือก (σ) เลือกกลุ่มย่อยของทูเปิลที่ตรงตามเงื่อนไขที่กำหนด
โครงการ (π) เก็บเฉพาะคุณลักษณะที่ระบุไว้และลบแถวที่ซ้ำกันออก
สหภาพ (∪) ส่งคืนทุกทูเปิลที่ปรากฏใน A หรือ B โดยไม่มีรายการซ้ำ
ตั้งค่าความแตกต่าง (−) ส่งคืนทูเปิลใน A ที่ไม่มีอยู่ใน B
จุดตัด (∩) ส่งคืนทูเปิลที่ปรากฏทั้งใน A และ B
ผลคูณคาร์ทีเซียน (×) รวมทุกทูเปิลของ A กับทุกทูเปิลของ B เข้าด้วยกัน
INNER JOIN เก็บเฉพาะทูเปิลที่ตรงกับเงื่อนไขการเชื่อมต่อเท่านั้น
เธต้า จอยน์ (θ) การเชื่อมต่อแบบทั่วไปโดยใช้เงื่อนไขการเปรียบเทียบใดๆ ก็ได้
อีควิ จอยน์ การเชื่อมต่อแบบ Theta join ซึ่งใช้เฉพาะการเปรียบเทียบความเท่าเทียมกันเท่านั้น
เข้าร่วมตามธรรมชาติ (⋈) เชื่อมโยงความสัมพันธ์โดยใช้คุณลักษณะที่มีชื่อและโดเมนเดียวกัน
การเชื่อมแบบ Left Outer Join (⟕) เก็บทุกทูเปิลจากความสัมพันธ์ด้านซ้าย และเติมค่า NULL ลงในความสัมพันธ์ด้านขวา
รอยต่อด้านนอกขวา (⟖) เก็บทุกทูเปิลจากความสัมพันธ์ด้านขวา และเติมค่า NULL ลงในความสัมพันธ์ด้านซ้าย
การเชื่อมต่อภายนอกแบบเต็ม (⟗) เก็บทุกทูเปิลจากทั้งสองความสัมพันธ์ โดยเติมค่าที่หายไปด้วย NULL

คำถามที่พบบ่อย

พีชคณิตเชิงสัมพันธ์เป็นภาษาคณิตศาสตร์เชิงกระบวนการที่ใช้ในการกำหนดการดำเนินการบนความสัมพันธ์ ส่วน SQL เป็นภาษาสอบถามเชิงประกาศที่กลไกฐานข้อมูลแปลงเป็นแผนการดำเนินการในรูปแบบพีชคณิตภายใน

ความสัมพันธ์สองแบบจะเข้ากันได้แบบยูเนียนเมื่อมีจำนวนแอตทริบิวต์เท่ากัน และแอตทริบิวต์ที่สอดคล้องกันแต่ละตัวมีโดเมนเดียวกัน ความสัมพันธ์แบบยูเนียน อินเตอร์เซกชัน และดิฟเฟอเรนซ์ ล้วนต้องการความเข้ากันได้แบบยูเนียน

ผลคูณคาร์ทีเซียนเป็นการคูณทุกแถวของ A กับทุกแถวของ B ทำให้เกิดความสัมพันธ์ระดับกลางขนาดใหญ่ที่ไม่มีความหมายมากนัก โดยปกติแล้วจะตามด้วยคำสั่ง SELECT เพื่อให้กลายเป็นการเชื่อมต่อที่มีประโยชน์

ไม่ พีชคณิตเชิงสัมพันธ์บริสุทธิ์จะมองความสัมพันธ์เป็นเซต ดังนั้นข้อมูลที่ซ้ำกันจะถูกกำจัดออกโดยอัตโนมัติหลังจากการดำเนินการทุกครั้ง แต่ SQL ทำงานแตกต่างออกไป — มันทำงานกับมัลติเซตและจะลบข้อมูลที่ซ้ำกันก็ต่อเมื่อใช้ DISTINCT เท่านั้น

ตัวดำเนินการ DIVISION ตอบคำถาม "สำหรับทั้งหมด" เช่น ค้นหาลูกค้าที่สั่งซื้อสินค้าทุกชิ้นในแคตตาล็อก โดยจะส่งคืนทูเปิลของความสัมพันธ์หนึ่งที่ตรงกับทูเปิลทุกตัวของอีกความสัมพันธ์หนึ่ง

ใช้ Outer Join เมื่อแถวที่ไม่ตรงกันยังคงมีความหมายอยู่ เช่น การแสดงรายชื่อลูกค้าทั้งหมดพร้อมข้อมูลคำสั่งซื้อเพิ่มเติม (ถ้ามี) Inner Join จะตัดแถวที่ไม่ตรงกันเหล่านั้นทิ้งไป ส่วน Outer Join จะเก็บแถวเหล่านั้นไว้และใช้ค่า NULL แทน

ผู้ช่วย AI สามารถแปลงนิพจน์พีชคณิตเป็น SQL และกลับกันได้ อธิบายลำดับความสำคัญของตัวดำเนินการทีละขั้นตอน และแจ้งเตือนเงื่อนไขการเชื่อมต่อที่ขาดหายไป ซึ่งหากไม่แก้ไขจะทำให้การสืบค้นข้อมูลกลายเป็นผลคูณคาร์ทีเซียนที่ช้า

ใช่แล้ว เครื่องมือ AI จะแปลงคำถามภาษาอังกฤษธรรมดา เช่น “ลูกค้าจากอินเดียที่ซื้อสินค้าทุกชิ้น” ให้เป็นโครงสร้างข้อมูลแบบต้นไม้พีชคณิตที่มีตัวดำเนินการ SELECT, PROJECT และ DIVISION จากนั้นแปลงเป็นคำสั่ง SQL ที่สามารถเรียกใช้งานได้

สรุปโพสต์นี้ด้วย: