วันอังคารที่ 27 มีนาคม พ.ศ. 2561

Week 11

What you have done/learned

  • ได้รู้เกี่ยวข้อมูลรายละเอียดและที่มาของ Bitcoin และ Blockchain มากขึ้น
  • ได้ทำการไปศึกษาค้นคว้าเพิ่มเติมเกี่ยวกับ Informal Design Guidelines for Relation Schemas โดยแบ่งออกเป็น 4 หัวข้อคือ
    • Semantics of the Attributes
    • Reducing the Redundant of Value in Tuples
    • Reducing NULL values in Tuples
    • Disallowing spurious Tuples
  • โดยสิ่งที่อาจารย์ให้ไปศึกษาเพิ่มคือหัวข้อที่ 4 หรือ Disallowing spurious Tuples
  • Spurious tuples คือ ตารางในฐานข้อมูลที่เกิดจากการ join ที่ไม่เหมาะสมเช่น การเลือก Attribute ที่เป็นเงื่อนไขสำหรับการ join ที่ไม่ใช่ทั้ง Primary key หรือ Foreign Key โดยจากตัวอย่างในรูปด้านล่างจะให้ relation ของที่ทำงานของพนักงานและข้อมูลพนักงาน

  • จะพบว่า ใน Relation ทั้ง2นั้น มีการออกแบบที่ไม่เหมาะสม คือ ส่วนของที่ทำงานพนักงานไม่มีรหัสของพนักงาน ทำให้การ join relation นั้นต้องใช้ Attributes ตัวอื่นแทนคือ Plocation ซึ่งผลที่ได้ทำให้ข้อมูลเกิดการซ้ำซ้อนและผิดพลาดดูได้จากจุดที่ *
  • การออกแบบ Relation ที่มีความเชื่อมโยงกับ Relation อื่นๆ ควรมีการออกแบบให้ Attribute ของทั้ง2ตัวนั้นมีความเหมาะสมเพื่อลดการเกิดของ Spurious tuples
  • ไม่ควรนำ Attributes ที่ไม่ใช่ทั้ง Primary Key และ Foreign Key มาใช้ในการ JOIN

Problem/Solution

  • ข้อมูลเกี่ยวกับ Bitcoin และ Blockchain ในแต่ละแหล่งนั้นไม่เหมือนกัน ต้องทำการหาข้อมูลอ้างอิงจากหลายที่เพื่อหาข้อสรุปที่ถูกต้องที่สุด

Decision

  • ในกลุ่มได้ตัดสินใจเลือกใช้ JS หรือ JavaScript ในการพัฒนาและออกแบบระบบควบคุมของตัวโปรเจ็คเนื่องจากเห็นตรงกันว่า JS สามารถใช้งานได้สะดวกกว่าการใช้ PHP

Related Info/Link/Reference

  • Spurious tuples คือ : http://www.spurioustuples.net/about/whats-a-spurious-tuple/
  • คำอธิบายเพิ่มเติมเกี่ยวกับ Guideline 4 : http://comet.lehman.cuny.edu/jung/cmp420758/chapter15.pdf

Week 8

What you have done/learned

  • ได้ทดสอบความเร็วในการ Insert/Query ข้อมูลจาก Python ไปยัง MySQL Workbench โดยข้อมูลที่ได้เกิดจากการสุ่มทั้งหมด

Problem/Solution

  • พบว่าการ Query ดูผลโดยการใช้ Select * นั้นส่งผลให้ตัวคอมพิวเตอร์ช้าเนื่องจากกินทรัพยากรมาก ทำการแก้ไขโดย Query แบบมีเงื่อนไข เพื่อลดปัญหาการนำข้อมูลที่ไม่ต้องการแสดงมาเกินความต้องการ
  • โปรแกรมเดียวกันไม่สามารถรันได้ในทุกๆเครื่องเนื่องจากใช้ Python คนละ Version แก้ไขโดยการตกลงกันในกลุ่มเพื่อหา Version ที่เหมาะสม

Decision

  • ได้ทำการเปลี่ยนโปรเจ็คจากคลินิกทำฟันเป็นนักวิ่งมาราธอนแทนเนื่องจากตัวงานมี scale ที่ใหญ่เกินไปทำให้วุ่นวายต่อการศึกษาพัฒนา
  • ได้ทดลองให้ Slack ในการคุยและแลกเปลี่ยนข่าวสารในการทำงานเนื่องจากตัว Slack มีการทำงานที่รองรับทั้ง Voice Chat, Third party Authentication รวมไปถึงสามารถทำ poll และสามารถปรับเปลี่ยนการนำเสนอของโค้ดได้ เช่น การเว้นวรรค ทำให้มองโค้ดได้ง่ายมากขึ้น

Related Info/Link/Reference

  • ตัวโค้ดที่ใช้ในการทำงาน
import MySQLdb
import sys
import datetime
import json
import random
import string
from random import randint

def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
    return ''.join(random.choice(chars) for _ in range(size))

grade_rand = ['A', 'B+', 'B', 'C+', 'C', 'D+', 'D', 'F']
json_file = {}

try:
    db = MySQLdb.connect(
        host = 'localhost',
        user = 's5830041',
        passwd = '4t44o0on',
        db = 'student'
    )
except Exception as e:
    sys.exit('Server Disconnected')

count = 0
cursor = db.cursor()
for i in range(int(3e3)) :
    print(i)
    for j in range(int(1e3)):
        for k in range(4):
            for l in range(10):
                json_file['100'+str(k)+'0'+str(l)] = random.choice(grade_rand)
        grade = json.dumps(json_file)

        try:
            cursor.execute("INSERT INTO student_data VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
                           (str(int(i*1e3+j)).zfill(8), id_generator(randint(8, 126)), id_generator(randint(8, 126)),
                            id_generator(randint(127, 500)), id_generator(10,"0987654321"), id_generator(randint(12, 125)),
                            datetime.date(randint(1900, 2020), randint(1, 12), randint(1, 25)), str(randint(30, 150)),
                            str(randint(120, 230)), id_generator(randint(3, 40)), id_generator(randint(3, 40)), grade))
        except:
                print('lost')
                count += count
    db.commit()

Week 7

What you have done/learned

  • ได้ทดลองการใช้ 7-Steps Algorithm เพื่อเปลี่ยนแผนภาพ ER หรือ ER Diagram ให้กลายเป็นรูปแบบของความสัมพันธ์หรือ Table สำหรับเก็บข้อมูล
  • ได้ฝึกการสร้าง ER Diagram จากโจทย์ในหนังสือหรือแบบฝึกหัดในเอกสารตามเว็ปต่างๆ


    แผนภาพ ER ก่อนทำการแปลงเป็นตาราง



    ตารางที่เกิดจากการแปลงแผนภาพ ER

Problem/Solution

  • จากแผนภาพที่นำมาใช้นั้นมี Primary Key เพียง Entity เดียวทำให้ตอนสร้างครั้งแรกเกิดปัญหาขึ้นเนื่องจากทุก Entity นั้นไม่มี Primary Key เป็นที่พึ่ง แก้ไขโดยการเพิ่ม Primary Key ของ Entity หลักไปในทุกๆ Entity รอง

Decision

  • ทำการเลือกแบบฝึกหัด ER Diagram ที่ไม่ได้มาจากหนังสือหรือไฟล์เอกสารเนื่องจากหาไม่พบ จึงได้ใช้แบบฝึกหัดซึ่งอยู่ในเว็ปแทน

Related Info/Link/Reference

  • ลิ้งของแบบฝึกหัด ER : https://www.safaribooksonline.com/library/view/learning-mysql/0596008643/ch04s04.html

Database Project

ผลงานทั้งหมดจากกลุ่มที่ 3 ลิ้งวิดิโออธิบายส่วน ER-Diagram https://www.youtube.com/watch?v=N3VQIO56_kM ลิ้งวิดิโอส่วน web applica...