วันจันทร์ที่ 14 มกราคม พ.ศ. 2562

Database Design Process

โดยหลักๆแล้วจะมีอยู่ 2 อย่างให้ทำ
  • Database Design
  • Applications Design
ในบทนี้จะสนใจไปที่ Conceptual database design เพื่อที่จะออกแบบ Conceptual schema
ให้กับ Database application

Methodologies

ที่จะพูดถึงใน chapter นี้ก็คือ ER Diagram (Entity Relationship)
หากเราจะต้องการที่สร้างและออกแบบ Database schema design 
เราจะต้องทราบถึง requirements ต่างๆที่เราต้องการใช้เป็นส่วนประกอบในการออกแบบ

ER Model Concepts

  • Entity เป็นแนวคิดพื้นฐานที่ใช้สำหรับ ER model
  • Entity เป็นสิ่งที่เป็นตัวแสดง หรือตัวแทน ของสิ่ง หรือ object ที่อยู่ใน Database
  • โดยที่ Entity ก็มี Attributes เป็นสิ่งที่ใช้อธิบายตัว Entity

Types of Attributes

  • Simple เป็นค่าที่เป็นค่าเดี่ยวๆ เช่น SSN
  • Composite เป็นค่าที่ประกอบไปด้วยหลายๆค่าอยู่ด้วยกัน เช่น ชื่อ (ชื่อแรก, ชื่อกลาง, นามสกุล)
  • Multi-valued เป็น attributes เดียวที่มีหลายค่าสำหรับ attribute นั้นๆ

Entity Type


  • ใน ER Diagram สำหรับ Entity Type จะถูกแสดงอยู่ภายใน กล่องสี่เหลี่ยม
  • ส่วน Attributes จะถูกแสดงอยู่ภายใน วงรี

3 main concepts of ER model

  • Entities
  • Attributes
  • Relationships

Relationships

เป็นการแสดงถึงความสัมพันธ์ของ Entity 2 อันหรือมากกว่า อย่างมีความหมาย เช่น
EMPLOYEE John works on the Moto PROJECT

Constraints on Relationships

Cardinality Ratio (แสดงถึงค่ามากที่สุดที่เกี่ยวข้อง)

  • One-to-one (1:1)
  • One-to-many (1:N) หรือ Many-to-one (N:1)
  • Many-to-many (M:N)

Participation Constraint  (แสดงถึงค่าน้อยที่สุดที่เกี่ยวข้อง)

  • zero
  • one or more

 

วันศุกร์ที่ 4 มกราคม พ.ศ. 2562

Week 2 GPA DB by CSV


บทความนี้จะมีความต่อเนื่องจาก บทความที่แล้ว (Week 1) โดยบทความนี้จะกล่าวถึง การ Export CSV จาก Google Speadsheet และนำไปเป็นชุดข้อมูล ที่จะใช้ในโปรแกรมคำนวณเกรด ต่อไป

ขั้นตอนการ Export CSV


แล้วเราก็จะได้ไฟล์ CSV จาก Google Spreadsheet มาโดยข้างในไฟล์จะมีข้อมูลลักษณะนี้


Course Id,Course Name,Year,Semester,Credit,Section,Grade,Grade(Score)
010013001,INTRODUCTION TO ENGINEERING,2559,1,1,1,B,3.0
010123102,PROGRAMMING FUNDAMENTALS,2559,1,3,1,A,4.0
010123130,COMPUTER ENGINEERING EXPLORA,2559,1,1,1,A,4.0
040203111,ENGINEERING MATHEMATICS I,2559,1,3,4,B,3.0
040313005,PHYSICS I,2559,1,3,3,B,3.0
040313006,PHYSICS LABORATORY I,2559,1,1,4,A,4.0

เมื่อได้ไฟล์ที่เราต้องการแล้ว ต่อไปจะเป็นการอธิบายการเขียนโปรแกรมคำนวณเกรดและเก็บข้อมูลจาก CSV

โดยโปรแกรมนี้จะเขียนด้วย ภาษา Python (3) และมีการใช้ Libraries ต่างๆดังนี้


วิธีการติดตั้งโปรแกรม

  1. เปิด Terminal หรือ cmd
  2. ตรวจสอบว่าบนเครื่องได้ติดตั้ง pip (Python Package Installer)ไว้หรือยัง
  3. หากยังไม่ได้ติดตั้งให้ทำตามเอกสารนี้ครับ https://pip.pypa.io/en/latest/installing/
  4. หากติดตั้งแล้วให้ใช้คำสั่งที่ Terminal    =>   "pip install gradedb"
  5. ทดสอบว่า Package ได้ถูกติดตั้งอย่างสมบูรณ์   =>  "pip show gradedb"
        เนื่องจากโปรแกรมนี้ไม่มี GUI (Graphic User Interface) และเป็นแบบ Text-base ทำให้ผมเลือกใช้ Library เข้ามาช่วยในการ Interact กับผู้ใช้งาน โดยเลือกใช้ PyInquirer มาเป็นตัวควบคุมการสั่งทำงานเป็นหลัก โดยผมออกแบบให้ทำงานเป็น CLI มากที่สุด ซึ่งจะต้องเรียกใช้งานโปรแกรมผ่านทาง cmd
หรือ terminal เท่านั้น (เป็นข้อจำกัดของ PyInquirer)

วิธีการเริ่มต้นใช้งาน

  1. เปิด Terminal หรือ cmd
  2. ใช้คำสั่ง   "gradedb" หรือ "gradedb filename.csv" ซึ่ง filename.csv ก็คือ ที่อยู่ของไฟล์ CSV ที่เราเตรียมไว้ใช้งาน

และนี่คือหน้าตาของโปรแกรมตอนเริ่มการทำงาน


เมื่อเริ่มต้นการทำงานก็จะเจอกับเมนูให้เลือกการทำงาน โดยจะมีให้เลือก 6 ตัวเลือก ประกอบไปด้วย
  1. Insert  เป็น Mode การเพิ่มวิชาเรียนเข้าสู่ฐานข้อมูล
  2. Update เป็น Mode การแก้ไขฐานข้อมูลที่มีอยู่
  3. Summary เป็นการแสดงฐานข้อมูลปัจจุบัน
  4. Calculate GPA เป็นการคำนวณเกรดเฉลี่ยทั้งหมดหรือในแต่ละเทอม
  5. Save and Close เป็นการ Save ฐานข้อมูลปัจจุบันลงไปที่ไฟล์ CSV และทำการปิดโปรแกรม
  6. Close เป็นการปิดโปรแกรม

อธิบายการออกแบบระบบของโปรแกรม

        ในส่วนระบบของโปรแกรม ตัวชุดของข้อมูลหรือฐานข้อมูล นั้นจะถูกเก็บอยู่ในรูปแบบของ DataFrame ซึ่งมาจาก pandas โดยเริ่มต้น ข้อมูลจะโหลดเข้ามาในโปรแกรม จากไฟล์ CSV เข้ามาเก็บใน memory ซึ่งภายใน DataFrame นั้นจะมีโครงสร้างที่สะดวกและเข้าใจง่ายในการเก็บข้อมูลที่มีลักษณะเป็นตาราง (Table) ทำให้เราสามารถจัดการกับข้อมูลภายใน DataFrame ได้สะดวกขึ้น

อธิบายการทำงานของแต่ละ Mode

Insert Mode
        เมื่อทำการเลือก Mode นี้แล้วนั้นก็จะพบกับคำถามต่อไป ก็คือคำถามเกี่ยวกับรายละเอียดของวิชาที่เราต้องการที่จะเพิ่ม โดยรายละเอียดที่ต้องการก็จะมีดังนี้
  1. Course Id (รหัสวิชา)
  2. Course Name (ชื่อรายวิชา)
  3. Year (ปีการศึกษา)
  4. Semester (ภาคการศึกษา)
  5. Credit (หน่วยกิต)
  6. Section (ตอนเรียน)
  7. Grade (เกรด)


Update Mode
        เมื่อเลือก Update Mode แล้วก็จะคำถามให้ป้อนเลขหรือลำดับของวิชาในฐานข้อมูลที่ต้องการแก้ไขข้อมูล

และเมื่อเราเลือกวิชาที่ต้องการแล้วก็จะมีคำถามต่อไปขึ้นมา โดยจะมีรายละเอียดเช่นเดียวกับตอนอยู่ใน Insert Mode แต่คำตอบจะถูก fill ด้วยข้อมูลที่มีอยู่แล้วในฐานข้อมูล (Default)



Summary Mode
        สำหรับ Mode เป็นแค่การแสดงฐานข้อมูลปัจจุบันขึ้นมาเท่านั้น



Calculate GPA Mode
        เป็น Mode การคำนวณเกรดเฉลี่ยหรือ GPA โดยสามารถคำนวณได้ทั้งแบบสะสมหรือแบบประจำภาค และเมื่อเข้าสู่ Mode นี้ก็จะเจอตัวเลือกว่าต้องการจะคำนวณเกรดของเทอมไหน


        ในส่วนของการคำนวณนั้น เนื่องจากโปรแกรมนี้มีวิธีการเก็บข้อมูลแบบ DataFrame ทำให้เราสามารถนำบางส่วนของข้อมูลทั้งหมด เช่น Column ของหน่วยกิต กับ Column ของเกรด(แต้ม) มาทำการคำนวณได้ โดยสูตรพื้นฐานการคำนวณเกรดเฉลี่ยนั้นก็คือ   
        ผลรวมของผลคูณระหว่างแต้มคะแนนและหน่วยกิต / ผลรวมของหน่วยกิต
โดยเมื่อเลือกเทอมที่ต้องการแล้วก็จะมีตัวเลือกให้เลือก ระหว่าง คำนวณแบบสะสม (Cumulative) หรือคำนวณแบบประจำภาค (Semester)



        หากเป็นการคำนวณเกรดเฉลี่ยแบบสะสม จะเป็นคำนวณที่เริ่มตั้งแต่เทอมแรกจนถึงเทอมที่เลือก เช่นหากต้องการที่จะคำนวณแบบสะสมใน ภาคการศึกษาที่ 2560 ภาคการศึกษาที่ 1 โปรแกรมจะต้องเริ่มหาผลรวมตั้งแต่ ภาคการศึกษาที่ 2559 ภาคการศึกษาที่ 1 จนถึง ภาคการศึกษาที่ 2560 ภาคการศึกษาที่ 1
        แต่ถ้าหากเป็นการคำนวณเกรดเฉลี่ยแบบประจำภาค จะสามารถคำนวณโดยทำการ filter ฐานข้อมูลก่อนเป็นลำดับแรกโดยจะ filter จาก ปีการศึกษา และ ภาคการศึกษาที่ต้องการ


Save and Close
        เป็นการบันทึกฐานข้อมูลที่อยู่ใน Memory ลงไปในไฟล์ CSV เพื่อให้ครั้งต่อไปที่เปิดโปรแกรมก็จะข้อมูลที่เป็นปัจจุบันหลังจากที่ได้แก้ไขไปแล้ว แล้วทำการปิดโปรแกรม

Close
        เป็นการปิดโปรแกรมโดยที่ไม่บันทึกข้อมูลปัจจุบัน

Source Code ของโปรแกรมสามารถดูได้ที่
GitHub
Bitbucket



วันเสาร์ที่ 29 ธันวาคม พ.ศ. 2561

To Do Week 1 (Update)


การคำนวณเกรดด้วย Google Spreadsheet

โดยการมีวิธีการคำนวณดังนี้

  • เกรดเฉลี่ยประจำภาคสามารถคำนวณได้จาก  แต้มระดับคะแนน / หน่วยกิตทั้งหมด
  • โดยแต้มระดับคะแนนสามารถคำนวณได้จาก ระดับคะแนนของเกรดที่ได้ * หน่วยกิต ดังนี้
    • A = 4
    • B+ = 3.5
    • B = 3
    • C+ = 2.5
    • C = 2
    • D+ = 1.5
    • D = 1
    • F = 0
  • ส่วนเกรดเฉลี่ยสะสมสามารถคำนวณได้จาก แต้มระดับคะแนนสะสม / หน่วยกิตสะสม
ดังตัวอย่าง


อธิบายรูปแบบการเก็บข้อมูล

        ทั้งนี้ได้มีการเปลี่ยนการจัดเก็บข้อมูลจากเดิมที่เก็บข้อมูลแบบแยกออกจากกัน มาเป็นแบบรวมกันไว้ในที่เดียว โดยจะเก็บในรูปแบบของตาราง (Table) โดยมี Table Head หรือหัวตาราง ดังนี้ รหัสวิชา
ชื่อวิชา ปีการศึกษา ภาคการศึกษา หน่วยกิต ตอนเรียน เกรด เกรด(แต้ม)

        ซึ่งในตารางก็ประกอบไปด้วยข้อมูลของรายวิชาต่างๆ โดยการคำนวณ GPA หรือเกรดเฉลี่ย นั้นสามารถทำได้โดยวิธีคิดด้านบน แต่หากนำมาใช้ในการคำนวณด้วย Google Spreadsheet จะต้องใช้ Formula มาเป็นเครื่องมือในการคำนวณ

        ตัวอย่างการคำนวณเกรดเฉลี่ยประจำภาค ปีการศึกษา 2559 ภาคการศึกษา 1 

=rounddown((SUMPRODUCT(E2:E10,H2:H10)/sum(E2:E10)), 2)

  โดยสูตร (Formula) นี้จะใช้ฟังก์ชันที่หมด 3 ฟังก์ชันด้วยกัน 1. rounddown() 2. SUMPRODUCT() 3. sum()
ฟังก์ชัน rounddown คือการปัดเศษลง โดยจะมี parameter อยู่ 2 ตัวที่ส่งเข้าไปคือ ค่าที่ต้องการ (ในที่นี้คือผลลัพธ์จากการหาร) และ จำนวนหลักของทศนิยม. ฟังก์ชัน SUMPRODUCT() คือผลรวมของการนำ array 2 ตัวมาคูณกัน โดยจาก Formula ด้านบนจะเห็นได้ว่ามี parameter 2 ตัวที่ส่งเข้าไป ตัวแรกคือ E2:E10 หมายถึงช่วงของข้อมูลชุดแรก (หน่วยกิต) และ H2:H10 หมายถึงช่วงของข้อมูลชุดที่สอง (เกรด(แต้ม)) ฟังก์ชันสุดท้ายคือ sum() เป็นผลรวมกันของข้อมูล ในที่นี้จะใช้เป็นช่วงของข้อมูล E2:E10 หมายความว่าตั้งแต่ cell E2 จนถึง cell E10