วันจันทร์ที่ 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

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

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

CONSTRAINT MySQL : ข้อจำกัด

CONSTRAINT MySQL 


     คือ ข้อจำกัดที่ถูกใช้ในการระบุกฏและข้อบังคับของข้อมูลในตาราง ที่จะถูกจัดเก็บในลำดับต่อไป
โดยมี constraint ที่รองรับ ดังนี้

1) NOT NULL
2) ๊CHECK*
3) DEFAULT
4) UNIQUE
5) PRIMARY KEY
6) FOREIGN KEY (Referential Integrity constraint)



Detail for each constraint 

  • NOT NULL
          ใช้สำหรับ กำหนดให้การใส่ข้อมูลในcolumn นั้นๆจะไม่ยอมรับค่าที่เป็น null ได้
          Syntax :
                    CREATE TABLE table_name ( column_name column_type NOT NULL);
          
          Example :
                    เช่น ใช้ในกรณีของการใช้เก็บข้อมูล ชื่อ และนามสกุลของลูกค้า โดยกำหนดว่า ห้ามเป็น null หรือค่าว่าง แต่สำหรับอายุ จะไม่ใส่ก็ได้ 

ภาพแสดงตัวอย่างตารางข้อมูลที่ได้ออกแบบไว้


                              
ภาพแสดงคำสั่งที่ใช้ในการสร้างตาราง



                    พอใช้คำสั่ง describe customer; เพื่อดูรายละเอียดของตาราง จะเห็นได้ว่า  รายละเอียดของตารางของattribute name กับ surname ไม่ยอมรับการใส่null คือ ตรงคอลัมน์ null มีค่าเป็น no




ภาพแสดงรายละเอียดของตาราง

                    ตัวอย่างการใส่ข้อมูล โดยมีอยู่ 3 กรณี ที่เราจะไม่สามารถใส่ข้อมูล
                        1) ใส่แต่อายุ
                        2) ใส่ชื่อกับอายุ
                        3) ใส่นามสกุลกับอายุ

ตัวอย่างการใส่ข้อมูลแต่อายุ

ตัวอย่างการใส่ข้อมูลแต่ชื่อและอายุ

ตัวอย่างการใส่ข้อมูลแต่นามสกุลและอายุ

                    แต่เราสามารถใส่ข้อมูลชื่อกับนามสกุล โดยไม่ใส่อายุได้ เนื่องจากข้อมูลอายุเราไม่ได้กำหนดว่า ห้ามเป็น null

ภาพแสดงตัวอย่างการใส่ข้อมูลชื่อกับนามสกุล โดยไม่ใส่อายุ

ภาพแสดงตัวอย่างการใส่ข้อมูลครบถ้วน

                    จากนั้นทำการเช็คข้อมูลที่ได้เพิ่มเข้าไป โดยใช้คำสั่ง select * from customer;  จะเห็นได้ว่าข้อมูลแถวแรก ตรงคอลัมน์ age เป็นค่า null เนื่องจากไม่มีการใส่ค่าจากผู้ใช้

ภาพแสดงตารางข้อมูล
             
  • CHECK*
          สาเหตุที่ทำการใส่ดอกจันทร์สีแดง เนื่องจาก ทางเว็บไซต์ w3schools ได้มีตัวอย่างการใช้ constraint check แต่พอทำตามแล้ว กลับไม่เป็นไปอย่างที่คิดไว้ จึงได้ทำการศึกษาข้อมูลเพิ่มเติม จึงได้คำตอบว่า "check constraints are not supported in MySQL" นั่นก็คือ MySQL ไม่รองรับ constraint check อ้างอิงข้อมูลจาก http://oak.cs.ucla.edu/cs143/project/mysql/constraints.html
          ตัวอย่างที่ทำ คือ สร้างตารางชื่อ persons เก็บข้อมูลชื่อกับอายุ โดยอายุที่ใส่ กำหนดให้มากกว่า 18 
ภาพแสดงการสร้างตาราง โดยใช้constraint check

          ซึ่งถ้าเป็นไปตามที่เขียน การใส่ข้อมูลที่ทำให้เงื่อนไขเป็นเท็จน่าจะใส่ข้อมูลไม่ได้ แต่นี่ ไม่มีการขึ้น error แจ้งเตือนเลย แถมยังบอกว่ามีการเปลี่ยนแปลง1 แถวอีกด้วย
ภาพแสดงการเพิ่มข้อมูล ซึ่งทำให้เงื่อนไขเป็นเท็จ

          จากนั้นลองทำการเช็คข้อมูลในตาราง พบว่าข้อมูลถูกจัดเก็บจริง ซึ่งในความเป็นจริง ไม่ควรถูกจัดเก็บในตาราง
ภาพแสดงข้อมูลในตาราง

โดยข้อมูลการศึกษาตัวอย่าง อ้างอิงจาก http://www.w3schools.com/sql/sql_check.asp
ภาพตัวอย่างการใช้constraint check จากเว็บไซต์

  • DEFAULT
          เป็นการกำหนด default ให้กับค่าที่ใส่ในตาราง ในกรณีที่ไม่ได้ใส่ข้อมูล
          Syntax :
               CREATE TABLE table_name
(column_name column_type DEFAULT 'default_value' );

          Example :
               เช่น ใส่ข้อมูลเกี่ยวกับเด็ก โดยในตารางมีการใส่ชื่อกับเพศ โดยเพศของเด็กในกรณีที่ไม่ใส่ จะถือว่ามีค่าเป็นเด็กผู้ชาย หรือ male นั่นเอง
ตัวอย่างตารางที่ได้ทำการออกแบบไว้

ภาพแสดงตัวอย่างคำสั่งการสร้างตารางโดยใช้ default

               ดูรายละเอียดของตารางโดยใช้คำสั่ง describe children; จะเห็นได้ว่าตรงค่า default ของ gender มีค่าเป็น male
ภาพแสดงรายละเอียดของตาราง
               ทดลองใส่ข้อมูล โดยการใส่ข้อมูลเป็นไปตามตารางด้านบนที่ได้ออกแบบไว้ โดยข้อมูลตัวที่สองจะไม่ใส่ค่า gender เพื่อดูการทำงานของ default
เพิ่มข้อมูลชุดแรก โดยให้เพศเป็นผู้หญิง
 
 เพิ่มข้อมูลชุดแรก โดยไม่ใส่เพศ 

เพิ่มข้อมูลชุดที่สาม โดยให้เพศเป็นผู้ชาย ซึ่งเหมือนกับค่า default

ภาพแสดงตารางข้อมูล โดยเป็นไปตามตารางที่ออกแบบไว้

  • UNIQUE
          ใช้ในกำหนดว่าการใส่ค่าข้อมูลในคอลัมน์นั้นจะไม่ยอมรับ ค่าข้อมูลที่มีค่าซ้ำกัน ซึ่งจะแตกต่างจากconstraint ที่เป็น PRIMARY KEY (จะได้ศึกษาในลำดับถัดไป) ตรงที่ UNIQUE นั้นจะไม่มีส่วนเกี่ยวข้องใดๆกับ FOREIGN KEY และคอลัมน์ที่มี constraint เป็น unique จะสามารถมีค่าข้อมูลเป็น NULL ได้ โดยค่าข้อมูลที่เป็น NULL นั้นมีความหมายที่ไม่ซ้ำกัน
          Syntax :
               CREATE TABLE table_name                     (column_name column_type UNIQUE);

          Example :
               เช่น การเก็บข้อมูล username กับ ชื่อและนามสกุล โดยมีแนวคิดที่ว่า 1 คนสามารถมีได้หลาย username แต่ username จะไม่มีทางซ้ำกัน  จึงกำหนดให้ attribute username มีconstraint เป็น unique 
ภาพแสดงตัวอย่างตารางที่ได้ออกแบบไว้


ภาพตัวอย่างการสร้างตารางโดยกำหนด constraint unique
               ทดลองการใส่ข้อมูล โดยใส่ข้อมูลตามตารางที่ได้ออกแบบไว้ โดยสามข้อมูลแรกที่ใส่ สามารถใส่ได้ปกติ แต่เมื่อถึงการใส่ข้อมูลตัวที่ 4 จะมีการแจ้งเตือน เนื่องจากข้อมูลตัวที่ 4 ที่ตำแหน่งของ username มีค่าที่ซ้ำกับค่าที่ใส่ไปก่อนหน้านี้ ซึ่งค่าusername ไม่สามารถซ้ำกันได้ เนื่องจากถูกตั้งให้เป็น unique


ภาพแสดงการใส่ข้อมูลตัวที่ 1-3 ตามลำดับ

ภาพแสดงการเกิด error เมื่อใส่ข้อมูลตัวที่ 4 ที่มีค่า username ซ้ำ

               เมื่อดูที่ตารางข้อมูล จะเห็นได้ว่า ในตารางจะไม่มีข้อมูลตัวที่ 4 อยู่เลย


ภาพแสดงตารางข้อมูล

PRIMARY KEY & FOREIGN KEY

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

  • PRIMARY KEY
          ซึ่ง Primary key จะมีคุณสมบัติ UNIQUE (นั่นคือไม่สามารถใส่ข้อมูลซ้ำกับข้อมูลเดิมได้) และ NOT NULL (สาเหตุที่เป็น not null เพื่อใช้ในการค้นหา) และจะใช้งานร่วมกับ Foreign key
          Syntax :
               CREATE TABLE table_name                     (column_name column_type,
                      PRIMARY KEY ( column_name));

          Example :
               เช่น การสร้างตารางเก็บชื่อย่อของภาควิชา,ความหมายเต็ม และสถานที่ตั้ง โดย primary key ที่แสดงในรูปแบบตาราง จะถูกขีดเส้นใต้ เพื่อบ่งบอก constraint ของมัน 
 ภาพแสดงตารางที่ได้ออกแบบไว้ โดยใช้ primary key

               ซึ่งในตารางที่ได้ออกไว้ primary key คือ n_department 

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

               ทำการใส่ข้อมูลตามที่ได้ออกแบบในตอนต้นทั้งสองข้อมูล แต่เมื่อทำการใส่ข้อมูลที่สาม ที่กำหนดให้ชื่อภาควิชาซ้ำกับของเดิมที่มีอยู่คือ ใส่ IE ซึ่งซ้ำกับข้อมูลตัวที่ 2 จึงมีการแจ้งเตือนerror ดังนี้


ภาพแสดงการใส่ข้อมูลตัวที่ 1 และ 2 ที่ไม่เกิดปัญหา


ภาพแสดงการใส่ข้อมูลตัวที่ 3 เพื่อทดลองการแจ้งเตือนเมื่อข้อมูลซ้ำ

ภาพแสดงตารางข้อมูล


  • FOREIGN KEY
          จะถูกใช้งานร่วมกันกับ primary key เพื่อสร้างความสัมพันธ์กันระหว่าง2 ตาราง เพื่อให้ละการใส่ข้อมูล
          Syntax :
               CREATE TABLE table_name                     (column_name column_type,
                      FOREIGN KEY ( column_name
                      REFERENCES table_pk_name ( column_pk_name )                              [ ON UPDATE RESTRICT | CASCADE | SET NULL ]                              [ ON DELETE RESTRICT | CASCADE | SET NULL ] );
               ** จะต้องสร้างตารางที่ใช้ในการอ้างอิงก่อน จึงจะใช้  FOREIGN KEY  ได้

          Example :
            เช่น การสร้างเก็บข้อมูลนักศึกษา โดยมีรหัสนักศึกษา ชื่อ นามสกุล และภาควิชาที่ศึกษาอยู่ โดยในข้อมูลของ attribute ภาควิชานี้ ได้อ้างอิงไปยังตารางของ department ที่ได้สร้างไว้ก่อนหน้าในบทเรียนของ primary key ซึ่งตารางข้อมูลที่ได้ออกแบบไว้คือ
ภาพแสดง ตารางที่ได้ออกแบบไว้

ภาพแสดงตัวอย่างการสร้างตาราง
                         ทำการใส่ข้อมูลตามตารางที่ได้ออกแบบไว้ในขั้นต้น ผลที่ได้คือเมื่อใส่ข้อมูลที่ 1-3 สามารถใส่ได้ปกติ ไม่เกิดปัญหาใดๆ (เนื่องจากค่าที่ใส่เข้าไปไม่มีค่า id ที่ซ้ำกัน และค่า department ตรงกับค่า n_department ในตาราง department ที่ได้สร้างไว้ก่อนหน้า) แต่เมื่อทำการใส่ข้อมูลชุดที่ 4 ที่กำหนดให้ department เป็นค่าที่ไม่เคยมีมาก่อนในตารางอ้างอิง จึงเกิด error ขึ้น

ภาพแสดงการใส่ข้อมูล 3 ชุดแรก

ภาพแสดง error ที่เกิดขึ้นเมื่อใส่ข้อมูลชุดที่ 4



ทำการเรียกดูข้อมูล โดยเชื่อมทั้งสองตารางจะใช้คำสั่งใดนะ???
          เรียนรู้เพิ่มเติมคือหากต้องการเชื่อมทั้งสองตาราง จะใช้คำสั่ง JOIN หรือ INNER JOIN  โดยทั้งสองตัวมีความหมายเหมือนกัน สามารถแสดงได้ในรูปเชิงคณิตศาสตร์ในคือการ intersection กัน คือ นำส่วนที่เหมือนกันทับซ้อนกัน 
ภาพแสดง รูปแบบ intersection
          Syntax :
ภาพแสดง syntax ของการใช้ inner join หรือ join
        

          Example :
            ในตารางทั้งสองตารางด้านบน เราสร้างตาราง s_engineer ที่ข้อมูลของ department อ้างอิงไปยัง ข้อมูล n_department ของตาราง department เราจึงทำการเชื่อมสองตารางเข้าด้วยกัน และให้แสดงข้อมูลออกมา 


ภาพแสดง การแสดงข้อมูลของทั้งสองตาราง

            ตารางที่กำหนดให้แสดงค่าออกมา กำหนดให้แสดงค่าของตาราง s_engineer ทั้งหมด และให้แสดงข้อมูลในตาราง department เฉพาะข้อมูล location ที่ชื่อdepartment ตรงกันจึงได้ข้อมูลออกมาดังตารางด้านบน


อ้างอิงเว็บไซต์ที่เกี่ยวข้อง