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

Relational Algebra

More examples of queries in Relational Algebra

     โดยการเขียน Relational Algebra นั่นเกิดขึ้นมาก่อนภาษา MySQL ที่ได้ทำการศึกษาไปก่อนหน้าเสียอีก ในบทเรียนวิชา DATABASE SYSTEMS จึงได้มีการสอนในเรื่องrelational algebra เพื่อให้มองถึงความสัมพันธ์ที่เกิดขึ้นของข้อมูล มากกว่าการเรียกใช้เพียงคำสั่ง ในภาษาระดับที่ 4 

     Relational Algebra มี operations พื้นฐานได้แก่
1) Select*
2) Project*
3) Union**
4) Rename*
5) Cartesian-product**
6) Difference**
* คือ เป็น Unary หรือ การมี Operand เพียงตัวเดียว
** คือ เป็น Binary operations หรือการมี Operand 2 ตัว

  • Select Operation
         แทนด้วยสัญลักษณ์ :   (อ่านว่า sigma) 

         ลักษณะการใช้ : ทำหน้าที่เป็นตัวเลือกแถว ข้อมูลจากเงื่อนไขที่ได้กำหนดไว้ ซึ่งคล้ายกับคำสั่ง where ในภาษา MySQL ที่เคยได้ศึกษาก่อนหน้านี้ 

         Syntax : 

         * condition สามารถเป็นได้ทั้งเครื่องหมาย มากกว่า น้อยกว่า เท่ากับ ไม่เท่ากับ และยังสามารถใช้ตรรกะ Boolean เข้ามาร่วมได้ในการสร้างเงื่อนไข

         ตัวอย่างการใช้ : 
         เช่น ในตารางความสัมพันธ์ของนักศึกษาคณะวิศวกรรมศาสตร์มีข้อมูลนักศึกษาอยู่ 
ภาพแสดงตารางข้อมูลทั้งหมด ของ ความสัมพันธ์ S_engineer


         เราจะเลือกเอาแต่ข้อมูลของนักศึกษาที่สังกัดภาควิชา  ECE หรือวิศวกรรมไฟฟ้าและคอมพิวเตอร์ นั่นเอง ซึ่งสามารถแปลงเป็น Relational algebra ได้ 

ภาพแสดงตัวอย่างการใช้Relational algebra


ภาพแสดงตารางใหม่ ตามที่ต้องการ

         โดย relational algebra ดังกล่าวมีความหมายเดียวกับ คำสั่ง MySQL ดังต่อไปนี้
                  select * from S_engineer
                  where department="ECE" ;


-----------------------------------------------------------------------------

  • Project Operation

         แทนด้วยสัญลักษณ์ :  (อ่านว่า pi)

         ลักษณะการใช้ : ทำหน้าที่เป็นตัว เลือกคอลลัมน์แบบ distinct  เพื่อใช้ในการแสดงตารางข้อมูล ซึ่งคล้ายกับคำสั่ง Select ในภาษา MySQL ที่เคยได้ศึกษาก่อนหน้านี้ 


         Syntax : 


         ตัวอย่างการใช้ : 

         เช่น ต้องการให้แสดงข้อมูลชื่อและนามสกุลของนักศึกษา โดยไม่สนใจข้อมูลอื่นๆ
ภาพแสดงตารางข้อมูลทั้งหมด ของ ความสัมพันธ์ S_engineer

         ซึ่งการที่เราจะเลือก attribute ที่จะนำมาแสดง สามารถแปลงเป็น Relational algebra ได้ ดังนี้

ภาพแสดงตัวอย่างการใช้Relational algebra


ภาพแสดงตารางใหม่ ตามที่ต้องการ


         โดย relational algebra ดังกล่าวมีความหมายเดียวกับ คำสั่ง MySQL ดังต่อไปนี้
                  select name,surname from S_engineer;


-----------------------------------------------------------------------------

  • Union

         แทนด้วยสัญลักษณ์ :  U (อ่านว่า Union)

         ลักษณะการใช้ : หลักการทำงานของมันเหมือนในเรื่อง set เลยคือ เอาข้อมูลทุกตัว โดยจะต้องไม่ซ้ำกัน ใช้เมื่อต้องการเชื่อมข้อมูลกับตารางมากกว่า 1 ตาราง

         Syntax : 

R U S 
โดย R และ S เป็นความสัมพันธ์

ภาพแสดง รูปแบบกรทำงานของ union

         ตัวอย่างการใช้ : 
         เช่น ต้องการให้หา id ของลูกค้าทั้งหมดที่ทำการกู้ยืมเงินหรือฝากเงิน หรือเป็นทั้งสองกรณีในคนเดียว

ภาพแสดงตารางข้อมูลทั้งหมด ของ ความสัมพันธ์ทั้งสองตาราง

         ซึ่งเราจะเลือกนำแต่ id ของลูกค้ามาแสดงเท่านั้นจึงเลือกใช้ project operation เข้ามาร่วมในการใช้ union ด้วย และ สามารถแปลงเป็น Relational algebra ได้ ดังนี้


ภาพแสดงตัวอย่างการใช้Relational algebra

         โดยมีลำดับขั้นตอนการทำงานดังนี้ คือทำ Project ทั้งสองตารางก่อนจึงค่อยทำในส่วนของ Union


ภาพแสดงลำดับการทำงานเมื่อใช้ union กับproject


-----------------------------------------------------------------------------

  • Rename

         แทนด้วยสัญลักษณ์ :       (อ่านว่า rho)

         ลักษณะการใช้ : ใช้ในการเปลี่ยนชื่อตารางหรือ attribute ในตารางใหม่ ซึ่งคล้ายกับคำสั่ง Alter ในภาษา MySQL ที่เคยได้ศึกษาก่อนหน้านี้ 


         Syntax : 

ภาพแสดง syntax การ rename ทั้ง 3 แบบ

         ตัวอย่างการใช้ : 


         เช่น ต้องการเปลี่ยนชื่อ ตารางจาก S_engineer เป็น Student_Eng และชื่อ attribute ภายในตาราง โดยก่อนเปลี่ยนเป็น id , name , surname และ department ซึ่งต้องการเปลี่ยนเป็น S_ID , Fname , Lname และ department ตามลำดับ

ภาพแสดงตารางก่อนทำการ rename

         จากความต้องการด้านบน สามารถแปลงเป็น relational algebra ได้ดังนี้ โดยจะทำการเปลี่ยนชื่อ attribute ตามลำดับ

ภาพแสดง relational algebra โดยใช้ rename

ภาพแสดงตารางใหม่ที่ได้หลังการ rename


-----------------------------------------------------------------------------

  • Cartesian-product

         แทนด้วยสัญลักษณ์ :  X (อ่านว่า cross) 

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

         Syntax : 

R x S 
โดย R และ S เป็นความสัมพันธ์

ภาพแสดง syntax เมื่อใช้ select เข้ามาเกี่ยวข้องด้วย


ภาพแสดง syntax เมื่อใช้ join แทนการใช้ cross กับ select 

         * ซึ่งสัญลักษณ์  หมายถึง join จึงขอรวบการนำเสนอ มาอยู่ในเรื่องนี้เลย

         ตัวอย่างการใช้ : 

         1) ในตัวอย่างการใช้แรกจะนำเสนอ ในกรณีที่ cross กันธรรมดา ไม่ได้ใช้ select เข้ามาเกี่ยวข้อง เพื่อแสดงให้เห็นหลักการทำงานของ Cartesian-product ได้อย่างชัดเจน

Borrower x Depositor

ภาพแสดงขั้นตอนการทำงานของ Cartesian-product


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

ภาพแสดงตารางหลังจาก cross กัน

         ต้องการทราบข้อมูลที่ลูกค้าเป็นทั้งผู้ฝากเงินและ ผู้กู้เงิน โดยกำหนดให้แสดง รหัสลูกค้า 
จำนวนเงินที่กู้ยืม และ จำนวนเงินที่ฝาก โดยสามารถแปลงเป็น relational algebra ได้ดังนี้

ภาพแสดง relational algebra 

         ขั้นตอนการทำงานของ relational algebra ที่ได้ออกแบบไว้นี้ จะทำในวงเล็บก่อน นั่นคือการทำ select ก่อนค่อยทำ project

ภาพแสดงข้อตอนการดำเนินการของ relational algebra ที่ได้ออกแบบไว้


-----------------------------------------------------------------------------

  • Difference

         แทนด้วยสัญลักษณ์ :  - (เครื่องหมาย -) หรือ เรียกอีกอย่างว่า minus

         ลักษณะการใช้ : ลักการทำงานของมันเหมือนในเรื่อง set เลยคือ พบค่าในความสัมพันธ์หนึ่งแต่ต้องไม่พบในอีกความสัมพันธ์หนึ่ง หรือก็คือการเอาส่วนที่อยุ่ในทั้งสองความสัมพันธ์ออก เอาเพียงที่อยุ่ในความสัมพันธ์ที่ 1 เพียงอย่างเดียว

         Syntax : 

R - S 
โดย R และ S เป็นความสัมพันธ์

ภาพแสดง รูปแบบกรทำงานของdifference


         ตัวอย่างการใช้ : 

         เช่น ต้องการให้หา id ของลูกค้าทั้งหมดที่ทำการฝากเงิน โดยไม่มีการกู้เงินเลย

ภาพแสดงตารางข้อมูลทั้งหมด ของ ความสัมพันธ์ทั้งสองตาราง

         ซึ่งเราจะเลือกนำแต่ id ของลูกค้ามาแสดงเท่านั้น จึงเลือกใช้ project operation เข้ามาร่วมในการใช้ difference ด้วย และ สามารถแปลงเป็น Relational algebra ได้ ดังนี้

ภาพแสดงตัวอย่างการใช้ Relational algebra

        
         โดยมีลำดับขั้นตอนการทำงานดังนี้ คือทำ Project ทั้งสองตารางก่อนจึงค่อยทำในส่วนของ difference

ภาพแสดงลำดับการทำงานเมื่อใช้ difference กับ project






-----------------------------------------------------------------------------

What is an inner join? outer join?

     ในการ join นั้น มีหลายรูปแบบมาก หนึ่งในนั้นคือ inner join และ outer join ซึ่ง inner join จะให้ความหมายเหมือนการ join ซึ่งได้ทำการศึกษาเพิ่มเติมไปใน week ที่ 3 แล้ว จึงขอสรุปสั้นๆ ดังนี้
     inner join คือ การนำข้อมูลที่มีการเก็บค่าเหมือนกันจากสองความสัมพันธ์ มาซ้อนทับกัน คล้ายหลักการ intersection ของเรื่อง set เช่น การแสดงข้อมูล Customers และตาราง Orders ที่มีความสัมพันธ์กัน ดังนั้น แสดงว่า ข้อมูล Customers ที่ออกมา จะแสดงออกมาแค่ที่มีอยู่ตารางOrders เท่านั้น นั่นคือ เป็นข้อมูลลูกค้าที่มีการสั่งสิ้นค้าเท่านั้น 

     ส่วน outer join จะคล้ายกับ Union(ในกรณีเป็น full outer join) ซึ่ง outer join จะถูกนำมาใช้แก้ปัญหาด้านบนในกรณีที่ต้องการทราบลูกค้าทั้งหมด 

     ยกตัวอย่างเช่น การจะแสดงข้อมูลจากตาราง Customers และตาราง Orders ที่มีความสัมพันธ์กัน หากเราต้องการจะแสดงข้อมูลในตาราง Customers ทั้งหมดถึงแม้จะไม่มีข้อมูลในตาราง Order ก็ตามหากใช้วิธีเหมือนใน inner join จะไม่สามารถแสดงข้อมูลชื่อ Customers ออกมาได้ทั้งหมด ต้องใช้วิธี outer join เท่านั้น

     โดยสามารถอธิบายได้ดังรูปนี้
ภาพแสดงรูปแบบความสัมพันธ์ของ join ชนิดต่างๆ

Outer join สามารถแบ่งย่อยได้อีก 3 กรณีคือ
1) Left Outer join
2) Right Outer join
3) Full Outer join

     นอกจากจะได้รูปด้านบนแล้วยังมีกรณีของ where null อีกด้วย ซึ่งสามารถแสดงได้ดังรูปต่อไปนี้
ภาพแสดงรูปแบบการใช้join แบบต่างๆ พร้อมคำสั่ง


     จะเห็นได้จากรูปว่า รูปแบบของouter join ที่ไม่เอาส่วนที่ซ้อนทับกัน หรือ ไม่เอาส่วนที่ intersection กัน จะมีคำสั่ง where null ต่อท้ายคำส่งเสมอ 

อ้างอิงข้อมูลจาก :
2) http://www.siamcoding.com/ForumId-109-View.aspx
3) http://blog.sqlauthority.com/2009/04/13/sql-server-introduction-to-joins-basic-of-joins/
4) http://i.stack.imgur.com/qje6o.png



-----------------------------------------------------------------------------

What is a division operation?

     การทำ Division ไม่ค่อยถูกใช้ใน Relation Algebra แต่มีประโยชน์ในการค้นหาบางประเภท รูปแบบของ Division คือ r/s
ภาพแสดงตัวอย่างการใช้ division

     จากรูปจะเห็นได้ว่าตารางแรกเป็นตาราง r เก็บ attribute A กับ B  และตารางที่สองเป็นตาราง s เก็บ attribute B และ ตารางที่สามเก็บค่าความสัมพันธ์ ของ r/s ซึ่งผลออกมาคือ การนำข้อมูลของตาราง s ไปเทียบกับ attribute ในตาราง r ซึ่งได้ข้อมูลออกมาเป็น set  โดยข้อมูลที่ได้ คือการที่ attribute A ตัวเดียวกันมีค่าใน attribute B ทั้งสองค่า ไม่ใช่แค่มีค่าใดค่า  1 (ต้องมีการจับคู่อยู่กับค่าทุกค่าของ tuple ในตารางที่สองซึ่งในตารางที่หนึ่ง ได้เน้นเป็นตัวอักษรสีแดงให้ดูชัดเจน ว่ามีข้อมูลตัวใดบ้างที่มีความสัมพันธ์แบบ r/s

 ข้อมูลอ้างอิงจาก :

ไม่มีความคิดเห็น:

แสดงความคิดเห็น