Tuesday, March 27, 2018

แปล Basics of Functional Dependencies and Normalization for Relational Databases (Week 11)

แนวทางที่ 1

  • ออกแบบ Relation schema ที่ง่ายต่อการเข้าใจ่
  • อย่ารวม attribute จาก multiple entity และ relationship type มากับ single relation
  • จากภาพเป็นส่วนของ Employee ที่เพิ่ม Dname, Dmgr_ssn (เกิดจากการผสมของ distinct real-world entities ของ employees กับ department)



  • มีข้อมูลที่ซ้ำกันใน EMP_DEPT ซึ่งส่งผลทำให้พื้นที่ในการจัดเก็บข้อมูล ซึ่งแก้โดยการ Update anomalies (EMPLOYEE x DEPARTMENT)

ชนิดของการ Update anomalies มี
  • Insertion
  • Deletion
  • Modification
Insertion Anomalies
  • เมื่อเพิ่ม tuple ใหม่ลงไปใน employee ที่ทำงานใน department มี Dnumber คือ 5 แล้ว attitbute value of department ทั้งหมดที่เป็น 5 เป็น consistent
Deletion Anomalies
  • ถ้าลบ employee ที่อยู่ตัวสุดท้ายแล้ว ข้อมูลที่อยู่ department เดียวกันก็จะถูกลบด้วย เช่น หากลบ Borg แล้วจะลบ Headquarters ด้วย
Modification Anomalies
  • หากเปลี่ยน manager ของ department 5 เราต้อง update ค่าใน tuple ของ employee ทั้งหมดที่ทำงานใน department นี้ แล้ว Database จะเปลี่ยนเป็น inconsistent
แนวทางที่ 2
  • ออกแบบ base relation schema ที่ไม่มีการ update anomalies
  • ถ้ามี anomalies (เพื่อเพิ่มประสิทธิภาพในการ query) ให้สังเกตและตรวจสอบให้แน่ใจว่าโปรแกรมนั้นมีการ Update ที่ถูกต้องหรือไม่
แนวทางที่ 3
  • หลีกเลี่ยงการวาง Attribute ที่อยู่ใน base relation ซึ่งมีค่าส่วนใหญ่เป็น NULL
  • หากหลีกเลี่ยงเกิด NULL ไม่ได้ ให้ Make sure ว่าใช้ในกรณีพิเศษเท่านั้น ไม่ใช้กับ tuple หลัก
  • เช่น ถ้า 15% ของ employee เป็น individual offices => ให้ทำการสร้าง attribute ชื่อ Office_number ใน EMPLOYEE relation
แนวทางที่ 4
  • การออกแบบ relation schema นั้นเราสามารถ join เงื่อนไขบน attribute ได้ตามความเหมาะสม (primary key, foreign key) ซึ่งการันตีได้ว่าไม่มี tuple นอกเงื่อนไขโผล่ขึ้นมา เพราะหากมีการหลีกเลี่ยง relation ที่มีการจับคู่ attribute ต่างๆ (foreign key, primary key) อาจทำให้เกิดการสร้าง Tuple นอกเงื่อนไขขึ้นมาได้ 

Monday, March 26, 2018

Code ในการทดสอบ DBMS (Week 8)


โค้ดที่ทดสอบ DBMS ใน Github

ทดสอบประสิทธิภาพของ DBMS กัน (Week8)

ในการทดสอบ DBMS นั้นเราได้ทำการทดสอบบนเครื่องคอมพิวเตอร์หนึ่งเครื่องแล้วใช่ข้อมูลไปจำนวน 10 ล้านแถว แล้วทดสอบ DBMS หลายตัว ซึ่งคอมพิวเตอร์ที่ใช้มีสเปค ดังนี้
  • Intel Core i7-6700HQ (2.60 - 3.50 GHz) 
  • NVIDIA GeForce GTX 950M (4GB GDDR5)
  • 8 GB DDR4
  • 1 TB 7200 RPM
  • ใช้ Virtual Machine : RAM 2 GB, CPU 2 Processor
ซึ่งค่าที่เราจะนำเปรียบเทียบนั้นมี
  • ความเร็ว
  • ขนาดของ DBMS
ผลที่ได้เป็น ดังนี้

ตารางผลการทดสอบ

กราฟผลการทดสอบ
สรุปผล

  • SQLite มีความเร็วในการ insert ข้อมูลเร็วที่สุด และกินพื้นที่น้อยที่สุด
  • MySQL มีความเร็วในการ insert ข้อมูลช้าที่สุด และกินพื้นที่มากที่สุด
ปัญหาที่พบ
  • เนื่องจากลองทดสอบ DBMS ในเครื่องหลักแล้ว ส่งผลทำให้โปรแกรมอื่นๆ ทำงานช้าลง เลยย้ายไปทดสอบใน Virtual Machine แทน
ลิ้งก์ที่เกี่ยวข้อง

Tuesday, March 6, 2018

ลองแปลง ER Diagram เป็น Relational Mapp (Week 7)

จากที่อาจารย์ให้ลองแปลง ER Diagram เป็น Relational Mapping
ข้อแรก เป็นการนำ ER Diagram จากสัปดาห์ที่ 6 มาแปลงเป็น Relational Mapping


Step 1 Mapping of Regular Entity Types
ส่วน Purchase Order

ส่วน Customer

ส่วน Line Item

Step 2 Mapping of Weak Entity Types : เนื่องจากไม่มี Weak Entity เลยไม่ต้องทำในส่วนนี้
Step 3 Mapping of Binary 1:1 Relationship Types : เนื่องจากไม่มีความสัมพันธ์แบบ 1:1 เลยไม่ต้องทำในส่วนนี้
Step 4: Mapping of Binary 1:N Relationship Types
เพิ่ม cus_num ใน Purchase Order

เพิ่ม po_numใน Line Item

เพิ่ม si_numใน Line Item

Step 5: Mapping of Binary M:N Relationship Types : เนื่องจากไม่มีความสัมพันธ์แบบ M:N เลยไม่ต้องทำในส่วนนี้
Step 6: Mapping of Multivalued Attributes
สร้างตารางของ Phone แยกออกมาเชื่อมกับ Customer
Step 7 : Mapping of N-ary Relationship Types : เนื่องจากไม่มีความสัมพันธ์แบบ N-ary เลยไม่ต้องทำ

จนสุดท้ายได้ Relational Mapping ตามนีี้
Relational Mapping ของข้อหนึ่ง


ข้อสอง เป็นการหาโจทย์มาทำ ER Diagram และทำ Relational Mapping
โดยนำโจทย์มาจากหนังสือ Fundamentals of Database Systems ใน Exercise ข้อ 7.22

โจทย์ 
A database is being constructed to keep track of the teams and games of a sports league. A team has a number of players, not all of whom participate in each game. It is desired to keep track of the players participating in each game for each team, the positions they played in that game, and the result of the game. Design an ER schema diagram for this application, stating any assumptions you make. Choose your favorite sport (e.g., soccer, baseball, football).

แปลไทย
จงสร้าง ER Diagram ที่เกี่ยวกับทีมและการแข่งขันในลีก
  • เก็บข้อมูลเกี่ยวกับทีม
  • เก็บข้อมูลของนักกีฬาที่มีส่วนร่วมในการแข่งขันของทีมนั้นๆ
  • เก็บตำแหน่งของผู้เล่นคนนั้น
  • เก็บผลการแข่งขัน
ER Diagram

จากนั้นทำ 7 Step
Step 1 Mapping of Regular Entity Types
ส่วน team

ส่วน competition

ส่วน player

Step 2 Mapping of Weak Entity Types : เนื่องจากไม่มี Weak Entity เลยไม่ต้องทำในส่วนนี้
Step 3 Mapping of Binary 1:1 Relationship Types
เพิ่ม home_team, away_team ใน competition

Step 4: Mapping of Binary 1:N Relationship Types
เพิ่ม id_team ใน player

Step 5: Mapping of Binary M:N Relationship Types : เนื่องจากไม่มีความสัมพันธ์แบบ M:N เลยไม่ต้องทำในส่วนนี้
Step 6: Mapping of Multivalued Attributes : เนื่องจากไม่มีMultivalued Attributes เลยไม่ต้องทำในส่วนนี้
Step 7 : Mapping of N-ary Relationship Types : เนื่องจากไม่มีความสัมพันธ์แบบ N-ary เลยไม่ต้องทำ

จนสุดท้ายได้ Relational Mapping ตามนีี้
Relation Mapping ข้อสอง

SQL injection (Week 16)

SQL Injection ในบางครั้งนักพัฒนาใช้ method ‘+’ (concat) กับ String ที่เป็นคำสั่ง SQL เพื่อ query ข้อมูลที่ user ต้องการ ซึ่งทำให้เกิดช่...