วันจันทร์ที่ 8 กุมภาพันธ์ พ.ศ. 2559

Relational Algebra Operations (Week4)


     Relational Algebra โดยพื้นฐานแล้วมีอยู่ 6 คำสั่งได้แก่
  • SELECT
  • PROJECT
  • UNION
  • SET DIFFERENCE
  • CARTESIAN PRODUCT
  • RENAME
รูปภาพแสดงการสร้างตาราง
     สร้างตารางขึ้นมาสองตารางกำหนดให้เป็นร้านหนังสือ A และ B ซึ่งเก็บรายชื่อหนังสือ Fantasy เอาไว้


รูปภาพแสดงการใส่ข้อมูลลงไป
     จากนั้นใส่ข้อมูลรายชื่อหนังสือ ผู้แต่ง และราคาลงไป


     Select แทนด้วย สัญลักษณ์ σ ใช้สำหรับการเลือกแถว(Tuple)ที่ต้องการ เช่น
     σauthor = J.R.R. Tolkien(fantasy_book_store_b)

ภาพแสดงผลลัพธ์ที่ได้
     จากรูปแสดงคำสั่งของ Mysql ที่เทียบเคียงกับ Relational Algebra Operations


     Project แทนด้วยสัญลักษณ์ ∏ ใช้สำหรับการเลือก Column ที่เราสนใจ เช่น
     ∏name,price$(fantasy_book_store_a)

ภาพแสดงผลลัพธ์ที่ได้
     จากรูปแสดงคำสั่งของ Mysql ที่เทียบเคียงกับ Relational Algebra Operations


     Union แทนด้วยสัญลักษณ์ U ใช้สำหรับการเลือกข้อมูลของทั้ง 2 ตารางทั้งหมดโดยตัวที่มีซ้ำกันนั้นจะแสดงค่าออกมาแค่ครั้งเดียว เช่น  
∏name(fantasy_book_store_a) U ∏name(fantasy_book_store_b)

ภาพแสดงผลลัพธ์ที่ได้
     จากรูปจะเห็นว่า The Hobbit ที่มีอยู่ทั้ง 2 ร้านแต่จะแสดงเพียงแค่ครั้งเดียวเพราะเนื่องจากชื่อซ้ำกัน


     Rename แทนด้วยสัญลักษณ์ ρ ใช้สำหรับเปลี่ยนชื่อตาราง หรือ attribute ในตาราง เช่น
     ρsa(fantasy_book_store_a) คือเปลี่ยนชื่อตาราง fantasy_book_store_a เป็น sa
     ρ(name_a,author,price_a)(fantasy_book_store_a) คือเปลี่ยนชื่อ attribute ในตาราง fantasy_book_store_a


     Set Difference แทนด้วยสัญลักษณ์ - ใช้สำหรับแสดงค่าในตารางฝั่งเดียวและไม่เอาข้อมูลที่มีความเกี่ยวข้องกัน เช่น

     ∏name_a(sa) - ∏name_b(sb)

ภาพแสดงการใช้คำสั่ง set difference
ภาพแสดงผลลัพธ์ที่ได้
     จากรูปแสดงคำสั่งของ Mysql ที่เทียบเคียงกับ Relational Algebra Operations


     Cartesian Product แทนที่ด้วยสัญลักษณ์ x ใช้สำหรับนำข้อมูลทั้ง 2 ตารางมา cross กันซึ่งค่าที่ได้ออกมาจะเป็นการจับคู่กันทั้ง 2 ตารางซึ่งจะไม่มีประโยชน์อะไร เราจึงต้องใช้การ select และ project เข้ามาช่วย เช่น

     ∏name_a(σname_a=name_b(sa x sb))

ภาพแสดงผลลัพธ์ที่ได้
     จากรูปแสดงคำสั่งของ Mysql ที่เทียบเคียงกับ Relational Algebra Operations



What is an inner join? outer join?
Ans Inner join นั้นคือการนำค่าระหว่าง set หรือข้อมูลที่มีการซ้อนทับกันหรือเหมือนกัน ส่วน Outer join นั้นคือการเอาค่าทั้งหมดของระหว่าง set นั้นเอง และยังมี join ประเภทอื่นๆอีกมากมาย


รูปภาพแสดงการ join ต่างๆ

What is a division operation?
Ans การทำ division operation คือการนำเอาค่าของ Attribute ตารางที่เป็น Divisor(S) ไปเทียบกับค่า Attributeในตาราง Dividend(R) เมื่อมีค่าที่เหมือนกันเราจะนำเอาค่านั้นออกมาแสดงเป็นผลลัพธ์ดังตัวอย่างที่เขียนในด้านล่างนี้

กำหนดให้ตาราง R คือ
+--------+-------+
|  A        |    B    |
+--------+-------+
|   a        |   1      |
|   b        |   2      |
|   a        |   2      |
|   p        |   3      |
|   p        |   4      |
+--------+-------+
กำหนดให้ตาราง S คือ
+------+
|    B   |
+------+
|     2   |
|     3   |
+------+
R/S จะได้ค่า
+------+
|    A   |
+------+
|     b   |
|     a   |
|     p   |
+------+

จากตัวอย่างที่ได้เห็นไปเราสามารถนำ division operation ไปใช้ต่อยอดในการหาข้อมูลจากฐานข้อมูลที่มีขนาดใหญ่ได้ เช่น เราต้องการอยากรู้ว่า ผู้แต่งหนังสือคนนี้ แต่งหนังสือเรื่องอื่นอะไรบ้าง เราก็นำชื่อของผู้แต่ง (Divisor) ไปหารกับ ฐานข้อมูลที่เราเก็บรายชื่อหนังสือ (Dividend) ก็จะได้ผลลัพธ์รายชื่อหนังสือที่ผู้แต่งคนนี้เคยแต่งไว้ออกมา

อ้างอิง
http://www.srisangworn.go.th/home/databaselearnx/ms2t2-2.htm
http://www.go4expert.com/articles/relational-algebra-operations-sql-t21166/
http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins
http://www.techonthenet.com/mysql/tables/alter_table.php