HOME

DAT001

DAT001

28 ธันวาคม 2559

Database System-Normal Form

Normal Form
รูปแบบที่เป็นบรรทัดฐาน

     ก่อนจะเอาแบบฐานข้อมูลมาใช้เนี่ย ก็ต้องแปลงเป็นตาราง
     ก่อนจะแปลงก็ต้องมีขั้นตอนการตรวจสอบก่อน
     คือการ Normalization เพื่อลดความซ้ำซ้อน

     ทำไมต้องลดความซ้ำซ้อน ?
     >เพื่อความถูกต้องของข้อมูล
     ความซ้ำซ้อนมีผลต่อ database มาก ต้องลดให้ได้มากที่สุด
     ความถูกต้องเป็นหัวใจหลักของ database ไม่ใช่ความเร็ว

     การทำ Normalization นอกจากลดความซ้ำซ้อนแล้ว ยังลดเนื้อที่การเก็บข้อมูลอีกด้วย


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



ความสัมพันธ์ระหว่างแต่ละคอลัมน์ในหนึ่งตาราง

     *แค่ภายในหนึ่งตารางเท่านั้นไม่เกี่ยวกับตารางอื่น

     1. Functional dependency : Attribute ที่สามารถระบุค่าของ Attribute อื่นๆได้ชัดเจนแน่นอน ไม่ซ้ำ
          
          Ex. รหัสนักศึกษา กับ อาจารย์ที่ปรึกษา
          Attribute รหัสนักศึกษา สามารถระบุ Attribute อาจารย์ที่ปรึกษาได้
          แต่ อาจารย์ที่ปรึกษา เอามาใช้ระบุ รหัสนักศึกษาไม่ได้
     
          ตัวที่ระบุค่าเรียกว่า Determinant ในที่นี่ก็คือ รหัสนักศึกษา
          ตัวที่ถูกระบุเรียกว่า Dependent ซึ่งก็คือ อาจารย์ที่ปรึกษา

          ปกติ Determinant มีเพียงหนึ่ง Attribute
          แต่ว่า Dependent มีกี่ Attribute ก็ได้ 
     
          เอารหัสนักศึกษา ไประบุ ชื่อนักศึกษา, นามสกุล, วันเดือนปีเกิด, ... 


*สัญลักษณ์จะเป็นลูกศร Determinant ชี้ Dependent

          แต่ว่า Determinant จะมีมากกว่าหนึ่ง Attribute ก็ได้
          ก็เหมือน Keyหลักแหละ
          อย่างเช่น ถ้าเป็น Composite Entity 
          Key หลัก ก็จะเป็น 2 Attribute รวมกัน
          Determinant ก็เหมือนกัน

     2. Fully Functional dependency : หลักการคือ ถ้าทุกคอลัมน์มีความสัมพันธ์กันหมดเรียกว่า Fully


          ยกตัวอย่างในภาพนี้เป็น fully เพราะทุกคอลัมน์มีความสัมพันธ์กัน
          คือเป็น Determinant กับ Dependent กัน

          โดยส่วนใหญ่ Keyหลัก ก็เป็น Fully อยู่แล้ว เพราะระบุได้ทุกคอลัมน์
          เพราะ Keyหลักเป็นตัวแทนข้อมูล

     3. Partial dependency* : ในบางครั้งKeyหลักเป็นKeyผสม (มีมากกว่า 1 Attribute)
                                         แล้วบางส่วนของ Keyหลัก มีความสัมพันธ์กับ Attribute อื่น


          Q.มีความสัมพันธ์แบบไหนบ้าง ในตารางนี้ ?

          A.อย่างแรก คือเป็น fully คือทุกคอลัมน์มีความสัมพันธ์กัน
          โดย รหัสนักศึกษา+รหัสชุดวิชา เป็น Determinant
          ชื่อชุดวิชา กับ หมู่เรียน เป็น Dependent

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

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

     4. Transitive dependency* : คล้ายๆกับ Partial ต่างกันตรงที่ตัวระบุค่าในความสัมพันธ์ที่ซ่อนอยู่ 
                                          ไม่จำเป็นต้องเป็นส่วนหนึ่งของ Keyหลัก

                                           พูดง่ายๆคือ คอลัมน์อะไรก็ได้ที่ไม่เกี่ยวกับ Keyผสม
                                           แต่ว่ามีความสัมพันธ์กับคอลัมน์อื่น ถือว่าเป็น Transitive


     *สรุปว่าที่สำคัญคือต้องแยกให้ออกว่าเป็น Partial หรือ Transitive

Normalization

     เป็นกระบวนการตรวจสอบและแก้ไขปัญหาเกี่ยวกับความซ้ำซ้อนกันของข้อมูล (data anormaly)



     ภาพด้านบนนี้ เป็นตัวอย่าง database ที่ไม่ดี
     เพราะจับทุกอย่าง มายัดในตารางเดียว ( นักศึกษา, อาจารย์, ชุดวิชา )

     การทำ Normalization จะมีการดำเนินงานตามลำดับดังนี้

          1. First Normal Form : 1NF
          2. Second Normal Form : 2NF
          3. Third Normal Form : 3NF
          4. Boyce/Codd Normal Form : BCNF
          5. Fourth Normal Form : 4NF
          6. Fifth Normal Form : 5NF

     *โดยส่วนใหญ่ทำถึงขั้น 3 ก็เพียงพอแล้ว 

     ทำ Normalization แล้วได้อะไร ? 
          หลักๆก็คือ ลดความซ้ำซ้อน
          ประหยัดเนื้อที่เก็บข้อมูล
          ลดปัญหาข้อมูลขาดความถูกต้องสมบูรณ์
          ลดปัญหาที่เกิดจากการปรับปรุง เพิ่มเติม และลบข้อมูล

     1. First Normal Form : 1NF

          คุณสมบัติ : ในแต่ละแถว ของทุกๆคอลัมน์ มีข้อมูลเพียงค่าเดียว 

อย่างในภาพนี้ ถือว่าไม่อยู่ใน 1NF
แถวนึง มีหลายค่า 
ภาพนี้ ถือว่าอยู่ใน 1NF แล้ว

     2. Second Normal Form : 2NF

          คุณสมบัติ : 1. ต้องอยู่ในรูปแบบ 1NF แล้ว
                           2. ไม่มี Partial dependency

          Partial คือ Keyหลักเป็น Keyผสม แล้วพอแยกกันมันก็มีความสัมพันธ์กับAttributeอื่นด้วย
          จากตารางที่แล้ว อะไรคือ Keyหลัก
          รหัสนักศึกษา+รหัสชุดวิชา >>> 2 ตัวรวมกันถึงเป็น Keyหลักได้ 
          แล้วแถม แยกกัน ก็ยังมีความสัมพันธ์กับ Attribute อื่นด้วย


          พอระบุได้ว่าอะไรคือ Keyหลัก และมันเป็น Partial ก็ต้องทำให้มันไม่เป็น Partial 
          โดยการ Split ตารางออก 
          ให้แยก Partial ออกไปทั้งก้อน ( ทั้ง Determinant และ Dependent )

          แต่ว่าถ้ามี Attribute ไหนในตารางเดิม ที่ไม่มีความสัมพันธ์กับ Partial
          เราต้องคง Keyหลักเอาไว้ ในตารางเดิมด้วย
          อย่างในภาพ หมู่เรียน ไม่มีความสัมพันธ์กับ Attributeไหนเลย
          เพราะฉะนั้น หลังจากแยก Partial ออก จะเหลือแต่ หมู่เรียน ไม่ได้
          ก็ต้องเหลือ Keyหลักเอาไว้


     3. Third Normal Form : 3NF

          คุณสมบัติ : ไม่มี Transitive

          หลังจากแยก Partial ออกมาแล้ว ถ้ายังมี Transitiveอยู่ 
          อย่างภาพด้านล่าง
          ตารางข้อมูลนักศึกษา รหัสอาจารย์ กับ ชื่ออาจารย์ มีความสัมพันธ์กัน ถือว่าเป็น Transitive
          ก็ให้แยกตารางออก


         

          แยกแล้วต้องคง รหัสอาจารย์ไว้ด้วย เพราะมันต้องเชื่อมกัน

         ถ้าเราไม่คง รหัสอาจารย์ไว้ เราก็หาข้อมูลไม่ได้ ว่านักศึกษารหัสนี้ มีอาจารย์ที่ปรึกษาเป็นใคร
         เพราะฉะนั้นแยกออกมาก็ให้คง Keyหลักไว้(Determinant)

          แล้ว ตาราง ชุดวิชา ต้องแยกมั้ย เพราะจริงๆแล้ว ชื่อวิชากับหน่วยกิต ก็มีความสัมพันธ์กัน
          จริงๆแล้ว จะแยกไม่แยกก็ได้ เพราะมันก็เรื่องเดียวกัน แยกก็ไม่ได้ผิดหลัก แต่ก็ไม่ควรแยก

          TIP เวลาจะแยกตารางให้ลองถามคำถามดังนี้
               1. เราจะจัดเก็บข้อมูลอะไร
               2. เราจะหาข้อมูลอะไร
               3. เราจะใช้ข้อมูลอะไร
          

     ส่วนใหญ่ ในการทำงาน ทำถึงขั้น 3NF ก็พอแล้ว ขั้น 4-6 ไม่ค่อยได้ใช้

     ข้อควรคำนึงในการทำ Normalization 

          Overnormalization : คือจำแนก Relation มากเกินไป ทำให้เสียเวลาในการหาข้อมูลมากขึ้น

          Denormalization : การลดขั้นของ Normalization เพื่อให้การใช้งานมีความสะดวกขึ้น
                                      อันนี้ต้องคิดดีๆ จะใช้ก็ต่อเมื่อ มี Relation ที่เก็บข้อมูลน้อยๆ 
                                      Ex. เพศ, คำนำหน้าชื่อ








26 ธันวาคม 2559

Database System-E-R Model

Entity-Relationship Model (E-R Model)
โมเดลจำลองความสัมพันธ์ระหว่างข้อมูล


     บทนี้จุดประสงค์หลักคือ การออกแบบ E-R Diagram ให้ได้
     หัวใจหลักของ database คือการเก็บข้อมูลให้ถูกต้อง
     จะเก็บข้อมูลได้ถูกต้อง เราต้องลดความซ้ำซ้อนให้มากที่สุด
   
E-R Model

     - เป็นแบบจำลองข้อมูลซึ่งแสดงถึงโครงสร้างของฐานข้อมูล
       รายละเอียดและความสัมพันธ์ระหว่างข้อมูลในระบบ ในลักษณะที่เป็นภาพรวม
     - สัญลักษณ์ต่างๆที่ใช้ใน E-R Model เรียกว่า E-R Diagram

     เวลาออกแบบตาราง 1 ตาราง ควรเก็บแค่เรื่องเดียว อย่าเก็บหลายเรื่องในตารางเดียว
     เพราะแต่ละตารางสามารถเชื่อมโยงกันได้อยู่แล้ว โดยใช้ Primary key

     Entity

     หมายถึงสิ่งที่สนใจ สามารถระบุได้ในความเป็นจริง
     และต้องการเก็ฐรวบรวมข้อมูลที่เกี่ยวข้องด้วยไว้ในฐานข้อมูล
     พูดง่ายๆคือ Entity คือ ตารางที่เก็บข้อมูล

     Ex.
          บุคคล, สถานที่, เหตุการณ์

     Q.  ถ้าจะสร้างฐานข้อมูลมหาลัย อะไรควรเป็น Entity บ้าง
     A.  วิชา, อาจารย์, การลงทะเบียน, นักศึกษา


          1. Strong Entity : เกิดขึ้นได้ด้วยตัวเอง การคงอยู่ของEntity ไม่เกี่ยวข้องกับ Entity อื่น
                                    >สัญลักษณ์ สี่เหลี่ยมเส้นเดียว
          2. Weak Entity :  การคงอยู่ของ Entity แบบนี้ จะเกี่ยวข้องกับ Entity อื่นในระบบฐานข้อมูล
                                   คือถ้า Entity ที่เกี่ยวข้องหายไป Entity ตัวนี้ก็ไม่จำเป็นอีกต่อไป
                                    >สัญลักษณ์ สี่เหลี่ยมสองเส้น



     Attribute (Column)

     ข้อมูลที่แสดงคุณสมบัติหรือคุณลักษณะของ Entity หรือความสัมพันธ์

          1. Simple Attribute : Attribute ที่ไม่สามารถแบ่งแยกย่อยลงไปได้อีก

          2. Composite Attribute : คือ Attribute ที่สามารถแบ่งแยกย่อยลงไปได้อีก
               > สัญลักษณ์ ทั้ง Simple กับ Composite จะเป็นวงกลม

          3. Key Attribute : Attributeหรือกลุ่มAttribute ที่มีค่าของข้อมูลไม่ซ้ำกันใน Entity
               > สัญลักษณ์ เหมือน Simple แต่จะมีขีดเส้นใต้



          4. Single-Valued Attribute : Attribute ที่มีค่าของข้อมูลในแต่ละสมาชิกของ Entity ได้ค่าเดียว
               > สัญลักษณ์ เส้นตรงเส้นเดียว

          5. Multi-Value Attribute : Attribute ที่มีค่าของข้อมูลในแต่ละสมาชิกของ Entity ได้หลายค่า
               > สัญลักษณ์ เส้นตรงสองเส้น
          6. Derived Attribute : Attribute ที่ค่าของข้อมูลได้มาจากการ
                                          นำค่าของข้อมูลใน Attributeอื่น มาคำนวณ     
               > สัญลักษณ์ เส้นประ


     Relationship

     หมายถึง Entity ที่แสดงความสัมพันธ์ระหว่าง 2 Entity ขึ้นไป
     ความสัมพันธ์นั้นอาจมี Attribute ของตนเองก็ได้
     ความสัมพันธ์ระหว่าง Entity ใดๆ อาจมีมากกว่าหนึ่งความสัมพันธ์ก็ได้
     > สัญลักษณ์ สี่เหลี่ยมข้าวหลามตัด


     Entity ที่เกี่ยวข้องกับความสัมพันธ์เรียกว่า Participant ของความสัมพันธ์

          1. Total Participation : คือทุกสมาชิกใน Entity มีความสัมพันธ์กับข้อมูลในอีก Entity

          2. Partial Participation : คือสมาชิกบางตัวใน Entity มีความสัมพันธ์กับข้อมูลในอีก Entity

     รูปแบบความสัมพันธ์ระหว่าง Entity ***
   
          1. ความสัมพันธ์แบบหนึ่งต่อหนึ่ง (1:1)
          2. ความสัมพันธ์แบบหนึ่งต่อกลุ่ม (1:M)
          3. ความสัมพันธ์แบบกลุ่มต่อกลุ่ม (M:M)



      *2 อันแรกไม่ค่อยมีปัญหา แต่จะยากตรงแบบที่ 3(M:M)


     เราสามารถใช้ Foreign Key เชื่อม Entity ในความสัมพันธ์แบบ 1:1 หรือ 1:M ได้
     แต่ถ้าเป็น M:M จะใช้ระบบ Foreign Key ไม่ได้ 

     อย่างรูปภาพด้านบน Entity PAINTER กับ PAINTING มีความสัมพันธ์แบบ 1:M
     เชื่อมความสัมพันธ์ของ PAINTER กับ PAINTING ด้วย Foreign Key ได้ 
     
     ความสัมพันธ์แบบ 1:1 ก็ใช้ระบบ Foreign Key ได้เหมือนกัน

     แต่ถ้าเป็นความสัมพันธ์แบบ M:M
     Ex. นักศึกษา กับ วิชาเรียน 
     ( นักศึกษาคนนึงลงได้หลายวิชาเรียน และ วิชาเรียนนึงก็มีนักศึกษาหลายคน )
     ให้ลองคิดว่าจะใช้อะไรเชื่อมกัน
     จะเอารหัสนักศึกษา ไปใส่ Entity วิชาเรียน ก็ไม่ได้
     หรือจะเอารหัสวิชา ไปใส่ Entity นักศึกษา ก็ใส่ไม่ได้เหมือนกัน

     แล้วจะทำยังไง ?? 
     คำตอบคือ Composite Entities
     Composite Entities คืออะไร ?

     นอกจากความสัมพันธ์ 3 แบบที่กล่าวไป ( 1:1, 1:M, M:M ) 
     ความสัมพันธ์ยังมีลักษณะเพิ่มเติมดังนี้

          - Existence Dependency : ความสัมพันธ์ระหว่าง Strong กับ Weak Entity

          - Recursive : ความสัมพันธ์ในตัว Entity เอง ไม่ต้องเชื่อมกับ Entity อื่น
               Ex. หัวหน้าห้องกับนักศึกษา
                     ไม่ต้องเชื่อมนักศึกษากับ Entityอื่น เพราะมีข้อมูลอยู่ในนักศึกษาอยู่แล้ว

          - Composite Entities : เป็น Entity ที่ถูกสร้างขึ้นเพื่อใช้เชื่อมความสัมพันธ์ระหว่าง Entity
                                           แบบ M:M ให้เป็นความสัมพันธ์แบบ 1:M

          

     Ex. ความสัมพันธ์ นักศึกษา กับ วิชาเรียน
           เป็นความสัมพันธ์แบบ M:M

           เราจะสร้าง Entities ใหม่ขึ้นมา ซึ่งเรียกว่า Composite Entity
           โดยนำ Key หลักของ แต่ละ Entity มาใช้ 
           ซึ่งเมื่อรวมกันแล้วจะเป็น Keyหลักของ Composite Entity 


         
     ความสัมพันธ์นึง สามารถมี Entity มาเกี่ยวข้องได้มากกว่า 2 Entity เรียกว่า N-ary Relationship
     2 Entity เรียก Binary Relationship
   

E-R Diagram



อันนี้เรียก Chen model

อันนี้เรียก Crow'sFoot




การออกแบบฐานข้อมูลด้วย E-R Model

     1. ศึกษาทำความเข้าใจระบบงานให้เรียบร้อย
     2. ระบุ Entity ที่ควรมีในระบบ
     3. กำหนดความสัมพันธ์ เป็นคู่ๆก่อน แล้วค่อยจับมารวมกัน

Case Study
เฉลยอยู่ล่างสุดของโพสต์


EER (Enhance E-R Model)

     - เป็นการนำ E-R Model มาเพิ่มเติมในเรื่องของความสัมพันธ์แบบ Supertype/Subtype
     - มีกระบวนการถ่ายทอดคุณสมบัติ ( Attribute inheritance )

     Supertype : คือ Entity ที่เป็นต้นแบบของ Entity อื่นๆ 
                      โดย Supertype จะประกอบด้วย Subtype ต่างๆ
     Subtype : คือ Entity ที่มีคุณสมบัติแตกต่างกัน แต่มีคุณสมบัติพื้นฐานเหมือนกัน
                    ซึ่งคุณสมบัติพื้นฐานจะถูกเก็บใน Supertype 


จากรูปภาพ Employee เป็น Supertype โดยจะเก็บข้อมูลพื้นฐานไว้
และ Employeeแบบต่างๆ จะเป็น Subtype ซึ่งมีคุณสมบัติเฉพาะตัวต่างกัน
Subtype จะสืบทอดคุณสมบัติพื้นฐานจาก Supertype แล้วเพิ่มคุณสมบัติอื่นๆ

   Q. แล้วจะหา Supertype กับ Subtype ยังไง?
   A. ใช้กระบวนการ Generalization หรือ Specialization
        Genaeralization คือ มองหาสิ่งที่เหมือนกันใน Subtype แล้วเอามาเป็น Supertype 
        Specialization คือ มองหาจุดที่ต่างกันแล้วเอามาเป็น Subtype
     
          ข้อดีของ EER 
          - ไม่ต้องกำหนด Attribute ซ้ำซ้อนใน Subtype อีกต่อไป
          - คุณสมบัติเฉพาะของแต่ละ Subtype ก็จะมีความหมายแตกต่างกันตามความเป็นจริง

     ความสัมพันธ์ Supertype กับ Subtype


     Disjointess Constraints




อย่าง PERSON นี่จะเป็นทั้ง MALE กับ FEMALE ไม่ได้
แต่ EMPLOYEE ทำหลายอย่างได้

การแปลงจาก E-R Model เป็น Relational Data Model
( แปลงจาก E-R เป็น ตาราง )

     1. แปลง Entity เป็นตาราง
     2. Attribute ต่างๆ ก็คือ column ในตาราง
     


เฉลยแบบฝึกด้านบน(Case Study)













24 ธันวาคม 2559

data science เรียนคอร์สไหนดี ??

สำหรับคนที่เพิ่งเริ่มต้น สนใจงานทางด้าน data science, data analytics ก็มักจะมีคำถามว่า

จะเริ่มยังไง จะเรียนอะไร เรียนที่ไหนดี ?
ใช้เครื่องมืออะไรดี SAS ดีมั้ย  หรือ R ดี ?
เรียน Big Data ด้วยมั้ย ?
แล้ว Machine Learning ล่ะ ?


วันนี้มี framework สำหรับพิจารณาว่า เราควรจะเริ่มเรียนรู้ยังไงได้บ้าง

Framework to choose the right analytics training :

     Step 1 :Which tool to learn?
     Step 2 :Which techniques to focus?
     Step 3 :How to learn?
     Step 4 :Where to learn?

Overview of the framework :

     คำตอบสำหรับ 2 คำถามแรก( Step 1&2 ) ก็ขึ้นอยู่กับ ทักษะ ของแต่ละคนว่าอยู่ระดับไหนแล้ว

     ถ้าเพิ่งเริ่มต้นเลย ไม่มีพื้นฐานด้านสถิติ หรือ เครื่องมือไหนเลย
     ก็ให้เริ่มจาก level 0 ทั้ง tools และ techniques

     หรือบางคนอาจจะมีพื้นฐานสถิติมา ก็ไปเริ่มจาก level 1 เลยก็ได้

Step 1 : Which tool to learn?

     Level 0 : Excel
          ถ้ายังใช้ Excel ไม่เป็น ควรจะเริ่มเรียนรู้เป็นลำดับแรก
          ควรจะใช้ pivot tables เป็น
          สามารถจัดการข้อมูลได้
          lookups ข้อมูลใน excelเป็น

     Level 1 : SAS/R/Python
          เครื่องมือใน level นี้ จะใช้ทำงานเป็นหลักเลย
          ถ้าเลือกไม่ถูก ลองอ่านlinkข้างล่างดู
          https://www.analyticsvidhya.com/blog/2014/03/sas-vs-vs-python-tool-learn/

     Level 2 : Qlickview/Tableau/D3.js
          เครื่องมือ visualization

     Level 3 : Big Data Tools
          Hadoop stack

     Level 4 : NoSQL Databases
          MongoDB

Step 2 : Which techniques should you be learning?

     Level 0 : Basic statistics - Descriptive and inferential statistics

     Level 1 : Basic predictive modeling - ANOVA, Regression, Decision trees, Time Series

     Level 2 : All other remaining  machine learning techniques except Neural nets

     Level 3 : Neural nets and deep learning


Step 3 : How should you learn?

     Step นี้ขึ้นอยู่กับ 2 ปัจจัย
          - ทรัพยากรของเราสำหรับจ่ายเพื่อเรียนรู้ ( เงิน,เวลา,energy )
          - self motivation

     ตามภาพด้านล่าง


     Step 4 : Where to learn?
          
          จาก 3 Step ที่ผ่านมา ก็จะรู้แล้ว ว่าเราควรเรียนอะไรบ้าง ก็ทำlistมา
          เราก็ควรจะพูดคุยกับคนที่เค้าเคยเรียนคอร์สที่เรา list ไว้  และอ่าน รีวิวของแต่ละคอร์สด้วย






cr : https://www.analyticsvidhya.com/blog/2015/02/choose-data-science-analytics-big-data-training/

ปล. postนี้ แปลจาก post ของ analyticsvidya นะครับ ไม่ได้แปลทั้งหมด มีขาดๆไปบ้าง อยากอ่านฉบับเต็ม ใช้ link ตามเครดิตได้เลยครับ




 

Database System-Relational Data Model

Relational Data Model

     เวลาเก็บข้อมูลเรามักจะเก็บแบบตาราง
     (แบบ structure )
     แต่ในยุคใหม่ก็จะเริ่มมีแบบ unstructure
     แต่ถ้าข้อมูลไม่ได้ใหญ่เกินไป ก็ใช้แบบ structure นี่แหละ



     *** สังเกตว่ารูปแบบตารางนี่ จำนวน column ค่อนข้างจะคงที่ มักไม่ค่อยเพิ่ม column โดยไม่จำเป็น
     เพราะมันคือโครงสร้างของตาราง เราต้องออกแบบให้ดีก่อน ค่อยใส่ข้อมูลลงไป 
     เพราะฉะนั้นการเพิ่ม column ให้คิดดีๆ

     ทุกตารางจะมี Primary Key
     เอาไว้เป็นตัวแทนของข้อมูลในแถวนั้นๆ
     ex. มหาวิทยาลัย ก็มี primary key คือ รหัสนักศึกษา
     >>> ดังนั้น Primary Key จะซ้ำกันไม่ได้เด็ดขาด
     ส่วน column อื่นก็เป็นคุณสมบัติทั่วไป
     ข้อมูลในแต่ละ column จะมี domain (ขอบเขตในการใส่ข้อมูล) ต่างๆกันไป


     แต่ละตารางเรียกว่า relation
     เวลาอ้างอิงข้อมูลไปแต่ละตาราง อย่าเอาข้อมูลอื่นๆไปปนด้วยทั้งหมด
     คืออย่างรูปข้างบน
     เอาเฉพาะ branch No. ซึ่งเป็น primary key มาอ้างอิงก็พอ
     ไม่ต้องเอา street, city, postcode  ไปด้วย
     เพราะมันจะทำให้ข้อมูลซ้ำซ้อน 
     พอเวลาแก้ไขข้อมูลทีนึง ก็เกิดความยุ่งยาก

     primary key เมื่อมีการอ้างอิงในแต่ละตาราง จะเรียกได้ว่า foreign key

     เวลาจะออกแบบตารางเก็บข้อมูลตารางละเรื่องพอ  และแต่ละตารางต้องมี primary key

คุณสมบัติของrelational

     ลำดับของแถวและคอลัมน์ไม่ทำให้ข้อมูลเปลี่ยนไป
     จะไม่มีสองแถวที่ซ้ำกัน
     แอททริบิวทุกตัวจะเป็น atomic เท่านั้น (attribute แต่ละตัวใส่ได้เพียง1ค่า )
     จำนวนแอทริบิวในความสัมพันธ์ เรียกว่า ดีกรี

Key Rule

     คีย์ คือ สิ่งที่ใช้ในการกำหนดความเป็นเอกลักษณ์ของแถวในความสัมพันธ์
     ทำให้การเข้าถึงข้อมูลบนฐานข้อมูลเป็นไปได้อย่างรวดเร็ว
         
     Primary Key( คีย์หลัก )
          - คือคีย์ที่ใช้ในการอ้างถึง entity ในฐานข้อมูล
          - สามารถเลือกได้จาก record ใดๆก็ได้ ที่ไม่มีโอกาสซ้ำกันแน่ๆ
          ถึงไม่ซ้ำกันวันนี้ แต่วันหน้ามีโอกาสซ้ำกัน ก็ใช้ไม่ได้
          - ถ้าไม่มีข้อมูลใดเลยในฐานข้อมูลที่เหมาะสมที่จะเป็นคีย์หลัก 
          ควรกำหนด record ใหม่สำหรับเป็นคีย์หลักโดยเฉพาะ
     *คีย์หลักไม่จำเป็นต้องเป็น column เดียว เป็นหลาย column รวมกันก็ได้

     Secondary Key (คีย์รอง)
          คือคีย์เดี่ยวหรือคีย์ผสม เมื่อใช้ในการค้นหาข้อมูลความสัมพันธ์จะได้มากกว่า 1 เรคคอร์ด
          คีย์รองไม่จำเป็นต้องเป็นเอกลักษณ์

     Foreign Key( คีย์นอก )
          คีย์หลักของความสัมพันธ์นึง ที่ไปเชื่อมต่อกับความสัมพันธ์อื่น

     Super Key
          กลุ่มของ attribute ที่สามารถนำไไปค้นหาข้อมูลที่เป็นเอกลักษณ์ได้

     Candidate Key
          ซุปเปอร์คีย์ที่มีขนาดเล็กที่สุด ที่สามารถระบุความแตกต่างในแต่ละ Tuple ได้



Relational Algebra

     -Relational Algebra ประกอบด้วย operations ต่างๆขั้นพื้นฐาน

     Relational Algebra เรียกอีกอย่างว่า Relational query language
     ใช้ในการจัดการข้อมูล โดยการระบุตัวกระทำ กับความสัมพันธ์ที่ต้องการจัดการ
     ผลลัพธ์ที่ได้คือ ความสัมพันธ์ใหม่

          ประเภทการใช้งานของตัวกระทำกับความสัมพันธ์ มี 2 รูปแบบ คือ
     1. การใช้งานขั้นพื้นฐาน
          Selection     เลือกแถวจากความสัมพันธ์
          Projection    เลือกเฉพาะคอลัมน์ที่ต้องการจากความสัมพันธ์
          Cross Product     สามารถรวมความสัมพันธ์ได้
          Set Difference     หาความแตกต่างระหว่าง 2 ความสัมพันธ์
          Union     เชื่อม 2 ความสัมพันธ์เข้าด้วยกัน

     2. การใช้งานขั้นสูง
          intersection
          join
          division

     หรือจะแบ่งอีกแบบ
     
     1. Unary Operators   คือ ตัวกระทำที่ต้องการเพียงความสัมพันธ์เดียว ( ตารางเดียว )
     ex. selectm project, rename

     2, Binary Operators   คือตัวกระทำที่ต้องการ 2 ความสัมพันธ์
     ex. union, intersection, difference และ cartesian product


     Selection operation ()
          เป็นการเลือกแถวจากความสัมพันธืตามเงื่อนไขที่กำหนด
          ผลที่ได้อาจมีจำนวนtuple ตั้งแต่ 0 ถึงจำนวนtupleทั้งหมด

          >>> สังเกตไหมว่า คอลัมน์เท่าเดิม

 การใช้ตัวกระทำ เป็นแค่การดึงข้อมูลจากฐานข้อมูลออกมาแสดง
 ตามตัวกระทำเท่านั้น ไม่ได้ทำให้ข้อมูลในฐานข้อมูลเสียหาย

     Projection operator (  )
          เลือกเฉพาะบางคอลัมน์ที่ต้องการจากความสัมพันธ์
          ผลลัพธ์ที่ได้จะได้จำนวนแถวเท่ากับความสัมพันธ์
          แต่จำนวนดีกรีอาจจะเท่ากัน หรือ น้อยกว่า 



เวลาเขียนคำสั่งซ้อนๆกัน เวลาดำเนินการ จะทำในวงเล็บก่อนแล้วออกมาเรื่อยๆ


     Union (  )
          ความสัมพันธ์ R1 และ R2 ที่มา Union ต้องมีรูปแบบความสัมพันธ์เหมือนกัน
          คือคอลัมน์มันต้องเหมือนกัน
          เมื่อ Union กันแล้ว ถ้ามีแถวไหนซ้ำกัน จะปรากฎเพียงครั้งเดียว


     เอาข้อมูล2ตารางมารวมกัน ตัดอันซ้ำกัน

     Intersection(  )
          เลือกจากแถวที่ซ้ำกันใน 2 ตาราง



     Cartesian Rule( cross )
          การนำแถวจากความสัมพันธ์ที่1 มาต่อกับ แถวจากความสัมพันธ์ที่2
          ผลที่ได้คือ จำนวนแถวทั้งหมด จะเท่ากับ จำนวนแถวของ 2 ตารางคูณกัน

     
     * cartesian นี่ ถ้า 2 ตารางมี คอลัมน์ต่างกัน ผลที่ได้ ก็จะมีจำนวนคอลัมน์เท่ากับ 2ตารางบวกกัน
     ( คอลัมน์+คอลัมน์ ), (แถวxแถว)


     Join 
          รวบรวมข้อมูลจากหลายความสัมพันธ์เข้าด้วยกัน
          โดยการ cross กัน แล้วระบุเงื่อนไขเพิ่มเติม


          >>> cross EMP  กับ DEPTINFO โดยเอาเฉพาะที่ Dept=Dept 
          cross กันเฉยๆ จะได้ 20 แถว
          แต่ว่า join ระบุเงื่อนไข เลยเหลือ 5 แถว

          เงื่อนไขในการ join ก็มีหลากหลาย


          กลับไปสังเกตรูปที่ join กัน มันจะมี คอลัมน์ซ้ำกัน คือ Dept
          ซึ่งเราจะตัดอันไหนออกไปก็ได้ มันเหมือนๆกัน
          พอตัดแล้วเรียกว่า Natural-Join
          ซึ่ง Natural-Join เป็นการ Join ที่ใช้กันมากที่สุด

     Division
          ใช้ในการหาข้อมูลบางประเภท เช่น การค้นหาลูกจ้างที่ทำงานอยู่ 2 แผนก


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

     รูปแบบ query จะต่างกับ relational algebra 
     { (A1,...,An) | p[(A1,...,An)]}
     ส่วนแรกเป็นการบอกว่าสนใจ atribute อะไร
     ส่วนหลัง | จะเป็นการบอกเงื่อนไข
     คำตอบที่ได้ จะประกอบด้วยแถวของข้อมูล (A1,...,An) ที่ทำให้สมการ p[(A1,...An)] เป็นจริง





cr: อ.เอิญ สุริยะฉาย  ภาควิชาวิทยาการคอมพิวเตอร์และสารสนเทศ (KMUTNB)



Comments system