วันจันทร์ที่ 2 เมษายน พ.ศ. 2561

wk12 : form

First form
จาก table employee
จะเห็นว่า มี Jon และ Lester มี 2 เบอร์
จึงไม่เป็น 1st form จากกฏคือ “each attribute of a table must have atomic (single) values”
จึงต้องทำให้ตารางเป็นดังนี้
(แยกเบอร์ออกมา)

Second form
มีกฏดังนี้
  • table จะต้องเป็น first form ก่อน
  • ต้องไม่มี non-prime attribute ที่ขึ้นอยู่กับ subsets of candidate key ของ table
non-prime attribute คือ attribute ที่ไม่ใช่ candidate keys

ยกตัวอย่าง ครูสอนวิชา
จากตัวอย่างจะเห็นว่า teacher_age ขึ้นอยู่กับ teacher_id (เป็น candidate keys) เพียงตัวเดียว

ดังนั้น ต้องแยกตารางเป็นดังนี้ 


Third form

  • Table จะต้องเป็น 2NF
  • ต้องไม่มี Transitive functional dependency ของ non-prime attribute บน super key ใดๆ
จากตารางจะเห็นว่า emp_zip ขึ้นอยู่กับ emp_id
และ emp_state,emp_city,_emp_distirict ขึ้นอยู่กับ emp_zip
จึงเกิด Transitive functional dependency (emp_zip เป็น non-prime attribute)

ทำการแยกตารางเพื่อไม่ให้เกิด Transitive functional dependency



ref: https://beginnersbook.com/2015/05/normalization-in-dbms/


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

wk11 : guideline4

Guideline 4

  • ออกแบบให้ relation schema ที่มีการ equally join (เลือกจาก attributes ที่เหมาะสม) จะทำให้ไม่เกิด spurious table (เกิดจากการ join โดยไม่ใช้ primary key หรือ foriegn key อ้างอิงจาก quora
  • เลี่ยงการใช้ attributes ที่ไม่ใช่ pk หรือ fk มาใช้ join

wk8 : database performance

ใช้การวัดเวลาในการ import ข้อมูล และการ Query ทั้ง 3 แบบ
1.Query 1 - รายชื่อนักศึกษาที่ชื่อขึ้นต้นด้วยตัว j, f, k
2.Query 2 - นักศึกษาที่ไม่ได้เกรด A ในวิชา PROGRAMMING FUNDAMENTAL
3.Query 3 - อันดับวิชาที่มีจำนวนนักศึกษาได้เกรด A มากที่สุด

DBMS ที่ใช้งาน : 
MySQL (python library)
Postgresql (python library)
SQLite ทำการติดตั้งทั้งตัว dbms และ library

ข้อมูลที่ใช้ import
subject
student
registration

เมื่อโหลดไฟล์ student ไปแล้วต้องลบบรรทัดแรกที่เขียนว่า >>>student<<< ออกไปด้วย (ใช้ Notepad++ จะเห็นเรียงเป็นบรรทัด)

จากนั้นทำการรันโค้ด python ที่ใช้วัดเวลาในการ import , query ข้อมูล
Google Drive

เมื่อลองรันแล้วนำข้อมูลมาใส่ตารางได้ดังนี้

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

wk6 : ทดลองนำไฟล์ขนาดใหญ่เข้า database

 What I have done

ทดลองสร้างไฟล์ขนาดใหญ่เพิ่มขึ้นเรื่อยๆ ดังตาราง 
จากนั้นทำการ import เข้า MySQL โดยใช้ python (library อยู่ใน Link)
แล้วใช้การ Query แบบ ทั้งหมด ( select * )

QUERY ALL
FETCH TIME (second)
1000 rows (0.28 MB)
0.031
9202 rows (1.93 MB)
0.016
12113 rows (2.18 MB)
0.157
20058 rows (4.54 MB)
1.453
550113 rows (78.71 MB)
1.828
3,622,113 rows (487.23 MB)
9.938
5,179,927 rows (733.53 MB)
15.984
16,084,625 rows (2271.03 MB)
54.125

Problem

หากใช้การ insert โดยใช้ loop ใน python เรื่อยๆจะใช้เวลานานมากๆ จึงใช้วิธี import ไฟล์ (csv file) แทน

Link in use

wk5 : Find ER from textbook

What I have done

หา ER Diagram จาก Textbook ที่ชื่อ Database Concept 6th Edition 
จากนั้นนำมาวาดใน Google Presentation


What I have learn


เส้นสองเส้นหมายถึงความสัมพันธ์แบบ Total participation หมายถึง สิ่งๆนึงต้องมีส่วมรวมในสิ่งอีกสิ่งแบบทุกตัว เช่น นักเรียนทุกคนอยู่ในdepartment

Weak entity คือ entity ที่ไม่มี primary key ของตัวเอง และขึ้นอยู่กับ owner (strong entity) เช่น
Course ที่เป็น Owner (เจ้าของ) ของ Section

Relation R สามารถมีตัวแปรเพื่มได้เช่น takes มีตัวแปร grade








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

w4 : import team's csv to database

import team csv to database

What I have done & learn
  • สร้างตารางแยกไว้ 3 ตาราง
    • student (เลขประจำตัว ชื่อ นามสกุล คณะ สาขา)
    • subject (รหัสวิชา ชื่อวิชา หน่วยกิต)
    • registration
  • ทำการ import ข้อมูลทั้ง 3 ตาราง โดยใช้ปุ่ม import ภายในตาราง
  • ทดลองการหาชื่อนักศึกษาจากตารางใน Registration
    • โดยใช้คำสั่ง Join


Problem & Decision
  • พบ Error 1452 เนื่องจากตารางที่มีความเกี่ยวข้องกัน มีข้อมูลไม่ครบเท่ากัน 
    • เช่น ในตารางวิชาเรียน กับ ในตารางลงทะเบียน
    • ในตารางลงทะเบียนมีวิชา ที่ไม่มีในตารางวิชาเรียน จะเกิด Error นี้
    • ทางแก้คือ เพื่มวิชาในตารางวิชาเรียน
  • จะทำการลบข้อมูลที่มี Foreignkey เชื่อมกันอยู่ ไม่สามารถทำได้

Reference
  1. https://stackoverflow.com/questions/1253459/mysql-error-1452-cannot-add-or-update-a-child-row-a-foreign-key-constraint-fa
  2. https://www.w3schools.com/sql/sql_join.asp
  3. https://dev.mysql.com/doc/workbench/en/wb-forward-engineering-sql-scripts.html

wk12 : form

First form จาก table employee จะเห็นว่า มี Jon และ Lester มี 2 เบอร์ จึงไม่เป็น 1st form จากกฏคือ  “each attribute of a table must ha...