วันอาทิตย์ที่ 27 พฤษภาคม พ.ศ. 2561

Database Project


ผลงานทั้งหมดจากกลุ่มที่ 3


ลิ้งวิดิโออธิบายส่วน ER-Diagram
https://www.youtube.com/watch?v=N3VQIO56_kM

ลิ้งวิดิโอส่วน web application
https://www.youtube.com/watch?v=WRRUskmDvpA&feature=youtu.be

ลิ้ง Download Slide
https://www.dropbox.com/s/88vsnlk0cg2eiab/Database%20group%203.pdf?dl=0

ลิ้งไฟล์ .zip web application
https://www.dropbox.com/s/jqn1hheatbfbfb1/database_project.zip?dl=0

ลิ้งไฟล์ sql ที่ใช้ใน Web application ( เป็นข้อมูลที่สมมติขึ้น )
https://www.dropbox.com/s/id4j82b9kxx05qk/database_people.sql?dl=0

จัดทำโดย
นายเจษฎากร   จิรเพิ่มพูนทรัพย์  5801012630041
นายณัฐชนน     นุชหมอน  5801012620101
นายปวริศ   ธารีชาญ  5801012610083
นายนวภัทร   อินทรารักษ์  5801012610075
นายคุณานนท์   ชื่นศิริ  5801012610016
นางสาวธัญนันท์   เอี่ยมสำอางค์  5801012630092

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

Week 12

What you have done/learned

  • ได้ฝึกการทำ Database Normalization จากตัวอย่างในเว็ปโดยเริ่มดังนี้
    • ใช้หลักการ First Normal Form ในการแก้ไขไม่ให้ 1 attribute เก็บค่ามากกว่า 1 ค่า


      เมื่อปรับแล้วจะได้ลักษณะดังนี้


    • ใช้หลักการ Second Normal Form ในการตรวจดูว่า ทุกๆ Non-Prime Attribute นั้นเป็น Fully Functional Dependency หรือไม่
    • ใช้หลักการ Third Normal Form ในการปรับตารางเพื่อไม่ให้เกิด Transitive Dependency

Problem/Solution

  • แหล่งข้อมูลในหลายๆเว็บให้ความหมายเกี่ยวกับ Normalization แต่ละข้อไม่เหมือนกัน เช่น 2NF คือ Table 1 ตัวต้องมีเพียง 1 Primary Key เป็นแบบ 1 Attribute เท่านั้น จึงใช้หลักการตามใน slide เป็นตัวอ้างอิงในการทำ 

Decision

  • การทำโปรเจ็คนั้นได้ตกลงกันว่าจะใช้ MySQL ในการจัดการฐานข้อมูล พร้อมกับใช้ภาษา Javascript ในการพัฒนา Web application

Related Info/Link/Reference

  • ลิ้งของเว็ปตัวอย่างการทำ Normalization : https://www.guru99.com/database-normalization.html

วันอังคารที่ 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

วันอังคารที่ 27 กุมภาพันธ์ พ.ศ. 2561

Week 6

What you have done/learned

  • ทดลองการ Insert ค่าจำนวณมากเข้าไปในฐานข้อมูล MySQL Workbench
  • นำเสนอเกี่ยวกับ Project ที่มีความเกี่ยงข้องกับการใช้ฐานข้อมูลเพื่อเลือกในการนำไปศึกษาและปฏิบัติจริง โดยที่เสนอไปในสัปดาห์นี้คือ ฐานข้อมูลของคลินิกทันตกรรมหรือร้านหมอฟัน และฐานข้อมูลการจราจร

Problem/Solution

  • การ Import ข้อมูลขนาดใหญ่เข้าไปใน MySQL Workbench นั้นส่งผลให้โปรแกรมทำงานหนักเกินไปทำให้เกินการ crash หรือค้างไปทำให้ต้องปิดการใช้งาน ทำการแก้ไขโดยการ generate ข้อมูลและ Insert เข้าไปทีละตัว ซึ่งช่วยแก้ปัญหาได้จริง
  • การ Insert และ Commit ทุกครั้งนั้นทำให้การดำเนินการช้าเกินกว่าที่ควรจะเป็นอย่างมาก แก้ไขโดยการกำหนดช่วงของ loop ในการ Commit เพื่อลดปัญหาความล่าช้าของการ Insert
  • การ Insert ที่มีปริมาณข้อมูลจำนวนมากๆทำให้เป็นภาระของคอมพิวเตอร์อย่างมาก คอมพิวเตอร์ของบางคนเกิดการกระตุกและค้าง หรือบางกรณีคือต้อง Restart เนื่องจากไม่สามารถทำงานได้แก้ไขโดยการให้เพื่อนที่คอมพิวเตอร์มีประสิทธิภาพสูงทำการสร้างข้อมูลให้
  • การสื่อสารในกลุ่มค่อนข้างล้าช้าและมีปัญหา แก้ไขโดยการระบุรายละเอียดและสิ่งที่จะชี้แจงให้ละเอียดมากขึ้นเพื่อลดปัญหาการเข้าใจไม่ตรงกัน

Decision

  • เนื่องจากข้อจำกัดของคอมพิวเตอร์จึงได้ทดลองจำลองการสร้างข้อมูลที่มีขนาดไม่ใหญ่มากเพื่อลดภาระในการ Insert
  • เลือกการใช้ Select * เพื่อทดสอบการแสดงข้อมูลทั้งหมด แต่เป็นการกระทำที่ไม่เหมาะสม ดังนั้นจะมีการปรับปรุงเรื่องการเลือกใช้คำสั่ง Select ให้สื่อความหมายมากขึ้น

Related Info/Link/Reference

  • โค้ดที่ใช้ในการ Generate และ Insert ข้อมูล

    
    
  • ข้อมูลและแหล่งอ้างอิงการใช้ MySQLdb ใน PyCharm
    https://www.youtube.com/watch?v=ryLsp6m1PnY
    https://www.youtube.com/watch?v=HJ9bTO5yYw0

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

Week 5

What you have done/learned

  • เป็นผู้ดูแลและช่วยวิเคราะห์แผนภาพ ER ของคลินิคแห่งหนึ่ง

  • อธิบายถึงความสัมพันธ์ของแต่ละ Entity รวมไปถึงรายละเอียดของ Attributes ต่างๆ
  • เพิ่มเติมแผนภาพ ER เกม MMORPG เพื่อเสริมข้อมูลของ Participation Constraint ซึ่งในแผนภาพ ER ของคลินิคนั้นไม่มีระบุไว้
  • ได้รู้ถึงความสัมพันธ์ระหว่าง Entity และรูปแบบลักษณะของ ER Diagram ที่แตกต่างกัน

Problem/Solution

  • ปัญหาแรกที่พบคือแผนภาพที่ไปค้นหามานั้นมีลักษณะของความสัมพันธ์ที่แตกต่างกัน

    แก้ไขโดยทำการเลือกรูปแบบของแผนภาพ ER Diagram เป็นแบบ Chen
  • บางแผนภาพมีความสัมพันธ์ไม่ครบ แกไขได้โดยเพิ่มแผนภาพที่ใช้ในการอธิบายเพิ่มเติม

Decision

  • ทำการเลือกใช้ ER Diagram แบบ Chen เนื่องจากเป็นแผนภาพที่คุ้นเคยกันมากกว่าแบบอื่นๆแต่หากใช้ในการนำเสนอหรือทำงานใหญ่การใช้ Crow Foot จะเหมาะสมกว่าหรือเลือกตามที่ผู้ว่าจ้างต้องการ
  • เลือกใช้ ER Diagram ของคลินิคเนื่องจากความสัมพันธ์ไม่ซับซ้อน สามารถเข้าใจได้ง่ายเนื่องจากผู้คนคุ้นเคยกับระบบการทำงานของคลินิคในระดับหนึ่งอยู่แล้ว

Related Info/Link/Reference

  • แผนภาพ ER ของคลินิค : https://books.google.co.th/books?id=9PH74cVVjUoC&lpg=PP1&dq=functional%20and%20object%20oriented&hl=th&pg=PP1#v=onepage&q&f=false
  • คำอธิบายแผนภาพ :
    http://blog.vzmart.com/er-model-entity-relationship-model/
    http://moo-mieng.freetzi.com/page%208(6).html
  • แผนภาพ ER ของเกม MMORPG https://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#/media/File:ER_Diagram_MMORPG.png

วันอังคารที่ 6 กุมภาพันธ์ พ.ศ. 2561

Week 4

What you have done/learned

  • เป็นผู้ดูแลส่วนการจัดการข้อมูลและรูปแบบไฟล์ CSV ของกลุ่มเพื่อให้อยู่ใน Pattern เดียวกันและง่ายต่อการใช้งาน


รูปแบบการเรียงคือ รหัสนักศึกษา, รหัสวิชา, ปีการศึกษา, ภาคเรียน, เกรด และ ระดับคะแนนตามลำดับ
  • ทดลอง Import ข้อมูลของกลุ่มเข้าไปในฐานข้อมูลและ query เพื่อนำข้อมูลมาแสดง
  • ได้ทำการศึกษาเกี่ยวกับโลกาภิวัฒน์โดยเป็นผลมาจาก Internet และ Social media ซึ่งได้ผลว่ามีทั้งข้อดีคือ ทำให้การติดต่อสื่อสารนั้นไปได้ทั่วถึงมากขึ้นการเข้าถึงข้อมูลมากขึ้นส่งผลให้ผู้คนมีความสนใจมากขึ้น มีทางเลือกในการตัดสินใจมากขึ้น ทางด้านเศรษฐกิจและอุตสาหกรรมเพื่อให้ก้าวทันโลกก็ได้พัฒนาให้มีการทำธุรกิจบนโลก Internet หรือ Online Shopping เพิ่มมากขึ้น แต่ก็มีข้อเสียคือเนื่องจากข้อมูลข่าวสารต่างๆนั้นไม่สามารถยืนยันความถูกต้องได้ 100% และมีอัตราการแพร่กระจายข้อมูลที่เร็ว ดังนั้นผู้ใช้ต้องมีวิจารณญาณในการเสพข่าวหรือข้อมูลด้วย
  • ข้อมูลการทำงานและรายละเอียดต่างๆสามารถอ่านได้จากสไลด์นี้
    https://docs.google.com/presentation/d/1KdCOrstuNWe23VNU3-OAkpWpGA8NnA5K5F1JC0CzEEQ/edit#slide=id.g3095ef1418_4_0

Problem/Solution

  • ใน MySQL Workbench ไม่สามารถปรับการใส่ของข้อมูลจากการ Import ได้เช่น หากต้องการเพิ่มข้อมูลที่มีการเก็บ Primary Key นั้นไม่สามารถทำได้ แก้ไขโดยการนำ Primary Key ออกเนื่องจากข้อมูลในตารางมี Foreign Key ช่วยตรวจสอบและมีโอกาสในการซ้ำกันยากขึ้นเพราะแยกตารางการเก็บข้อมูลอย่างชัดเจนมากขึ้น

    การจัดรูปแบบของ table ในการเก็บข้อมูล

Decision

  • การทำ Primary Key จากการการ Import นั้นทำได้ยากจึงตัดสินใจลบ Primary Key ออกจาก table
  • ทำการแยก table ของข้อมูลออกเป็น 3 ตารางเพื่อให้ง่ายต่อการจัดการข้อมูล
  • เลือกใช้ dbms หลักเป็น MySQL Workbench เพื่อทดสอบการทำงานว่ายากง่ายกว่า dbms ตัวอื่นหรือไม่

Related Info/Link/Reference

  • ข้อมูลของโลกาภิวัฒน์ : 
    https://th.wikipedia.org/wiki/โลกาภิวัตน์
  • Link สำหรับอ่านสไลด์ : https://docs.google.com/presentation/d/1KdCOrstuNWe23VNU3-OAkpWpGA8NnA5K5F1JC0CzEEQ/edit#slide=id.g3095ef1418_4_0

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

Week 3

What have you done/learned

  • คำสั่ง Select ใช้สำหรับเลือกข้อมูลจาก column ที่เราสนใจใน table นั้น โดยสามารถเลือกแบบเฉพาะ column หรือทั้งหมดได้

การเลือกเฉพาะ column




การเลือกทุกข้อมูลใน table
  • คำสั่ง Select Distinct ให้ในการเลือกข้อมูลที่ไม่ซ้ำกันมาแสดง


    กรณีใช้ Select ปกติ



    กรณีใช้ Select Distinct
  • คำสั่ง Where ใช้สำหรับกำหนดเงื่อนไขการแสดงของข้อมูลในกรณีที่เราต้องการดูทุก column ซึ่งต่างจาก Select ที่จะทำได้แค่เลือกบาง column หรือทั้งหมด

    การแสดงข้อมูลเมื่อใช้ Where คู่กับ Select
  • คำสั่ง And, Or หรือ Not จะให้ควบคู่กับ Where เพื่อลดขอบเขตของข้อมูลที่ต้องการจะนำมาแสดงโดยที่ And เงื่อนไขต้องถูกต้องทั้ง 2 กรณีหรือมากกว่าถึงจะนำข้อมูลมาแสดง, Or เงื่อนไขต้องถูกอย่างน้อย1ตัวถึงนำข้อมูลมาแสดง และ Not เงื่อนไขต้องไม่ใช่ตามที่กำหนดไว้ถึงจะนำข้อมูลมาแสดง

    ตัวอย่างการใช้เงื่อนไข And
  • คำสั่ง Order By ใช้ร่วมกับ Select โดยจะทำการเรียงลำดับ column ตามที่เรากำหนดโดย ASC คือการไล่จากน้อยไปมาก และ DESC คือการไล่จากมากไปน้อย

    การลำดับข้อมูลจากลำดับตัวอักษรของ Country
  • คำสั่ง Insert Into เป็นคำสั่งในการเพิ่มข้อมูลเข้าไปใน table ที่เราต้องการโดยสามารถระบุ column ที่เราต้องการใส่ค่าได้

    การเพิ่มข้อมูลลงใน table โดยใช้ Insert Into
  • คำสั่ง Is Null และ Is Not Null จะใช้ร่วมกับ Where เพื่อเลือกข้อมูลตามเงื่อนไขเช่น Is Null คือ column นั้นต้องไม่มีข้อมูลถึงจะเอาไปใช้ และ Is Not Null คือ column นั้นต้องมีข้อมูลถึงจะนำมาแสดง

    ตัวอย่างการใช้ Is Null เพื่อแสดงข้อมูลที่มี column ที่ไม่มีข้อมูลหรือเป็น Null อยู่
  • คำสั่ง Update จะใช้ร่วมกับ Where เพื่อใช้แก้ไขข้อมูลใน row นั้นๆ ตามตำแหน่งที่กำหนด

    การใช้คำสั่ง Update ในการแก้ไขข้อมูลใน row
  • คำสั่ง Delete ใช้ในการลบข้อมูลใน row ที่เราต้องการออกไปจาก table

    การใช้ Delete ลบข้อมูลของ Alfreds Futtekiste ออกจาก table
  • คำสั่ง Select Top ใช้ในการจำกัดผลการแสดงข้อมูลให้เป็นตามที่เรากำหนดเล่น Top 3 คือเอาข้อมูลของ 3 คนแรกสุด หรือใช้ Limit ก็มีผลเช่นเดียวกัน โดยสามารถใช้ร่วมกับ Where เพื่อจำกัดขอบเขตการค้นหาและแสดงข้อมูลได้

    การแสดงผลข้อมูล 3 คนแรกสุดโดยใช้ Top
  • คำสั่ง Min/Max จะใช้ในการเลือกข้อมูลตัวที่น้อยที่สุดหรือมากที่สุดมาแสดงโดยใช้ As และตามด้วยชื่อของ column ที่จะใช้เก็บข้อมูล โดยผลที่ได้จะแสดงใน column ที่เราตั้งชื่อไว้

    การหาข้อมูลราคาที่น้อยที่สุดโดยใช้ Min
  • คำสั่ง Count, Avg และ Sum เป็นคำสั่งสำหรับใช้เพื่อคำนวณโดย Count จะใช้นับข้อมูลที่สนใจ Avg จะใช้หาค่าเฉลี่ยของข้อมูลที่เราสนใจ และ Sum จะใช้หาผลรวมของข้อมูลที่เราสนใจ โดยทั้ง3คำสั่งจะใช้ร่วมกับ Where

    ตัวอย่างการใช้ Count นับรหัสสินค้า
  • คำสั่ง Like ใช้ร่วมกับ Where ในการเพิ่มเงื่อนไขสำหรับหาข้อมูลโดยมีทั้งการหาตัวอักษรที่อยู่ขึ้นหน้า, อยู่ตรงกลาง หรืออยู่ท้ายของข้อมูล เป็นต้น

    รูปแบบการใช้ Like ต่างๆ


    ตัวอย่างการใช้ Like ในการหาชื่อลูกค้าที่ชื่อขึ้นต้นด้วย a
  • Wild Card จะเป็นการใช้ลักษณะเดียวกับ Like แต่เพิ่มลูกเล่นมากขึ้นเช่น ข้อมูลที่มีตัวอักษร _ed โดยที่ตัวอักษรตัวหน้าจะเป็นอะไรก็ได้หากมี ed ตามหลัง ก็จะดึงมาใช้เป็นต้น

    ตัวอย่างการใช้ Wild Card เพื่อหาชื่อเมืองที่ขึ้นต้นด้วย ber
  • คำสั่ง In ใช้ร่วมกับ Where เพื่อจำกัดการแสดงข้อมูลโดยสามารถเลือกได้มากกว่า 1 ตัว

    ตัวอย่างการเลือกข้อมูลมาแสดงโดยที่จำกัดประเทศเป็น UK, Germany และ France
  • คำสั่ง Between ใช้สำหรับจำกัดขอบเขตของข้อมูลที่จะแสดงให้อยู่ในช่วงที่เรากำหนดเท่านั้น

    การใช้ Between เลือกข้อมูลที่มีค่าของราคาอยู่ระหว่าง 10 ถึง 20
  • Aliases เป็นการเก็บค่าที่ต้องการจะแสดงใน column ที่เราตั้งชื่อขึ้นผ่าน As

    การใช้ As เพื่อสร้าง column สำหรับแสดงผลข้อมูลใหม่
  • คำสั่ง Inner Join ใช้สำหรับเลือกข้อมูลจาก 2 ตารางที่มีข้อมูลเหมือนกันมาแสดงผลเหมือนการ Intersection ของ Set

    ใช้ Inner Join เพื่อแสดงข้อมูล OrderID และชื่อของลูกค้าที่มีรหัสลูกค้าตรงกันทั้ง 2 tables
  • คำสั่ง Left Join ใช้สำหรับเลือกข้อมูลที่อยู่ใน table 1 ทั้งหมดและข้อมูลที่ table 1 มีตรงกันใน table 2

    การใช้ Left Join เพื่อนำข้อมูลที่อยู่ใน Customers table และที่มีตรงกับ Orders table มาแสดง โดยสามารถแสดงข้อมูลของ Customers table ได้ถึงแม้จะไม่มีข้อมูลที่ตรงกับ Orders table ก็ตาม
  • คำสั่ง Right Join ใช้สำหรับเลือกข้อมูลที่อยู่ใน table 2 ทั้งหมดและข้อมูลที่ table 2 มีตรงกันใน table 1

    การใช้ Right Join เพื่อนำข้อมูลที่อยู่ใน Employees table และที่มีตรงกับ Orders table มาแสดง โดยสามารถแสดงข้อมูลของ Employees table ได้ถึงแม้จะไม่มีข้อมูลที่ตรงกับ Orders table ก็ตาม

  • คำสั่ง Full Outer Join คือการแสดงข้อมูลของทั้ง 2 ตารางไม่ว่าจะมีเหมือนกันหรือไม่

    การแสดงผลโดยใช้ Full Outer Join รวมทั้ง 2 tables
  • Self Join ใช้หนึ่งในวิธี Join table เช่นเดียวกัน แต่เป็นการ join กับตัวเองแทนที่จะไป join กับ table อื่นๆ

    ทำการ join กับตัวเองโดยเรียก table ซ้ำ 2 ครั้งผ่านชื่อตัวแปรที่ต่างกัน
  • คำสั่ง Union ใช้สำหรับนำ table ที่มี column เหมือนกันมารวมกันและแสดงผล โดยหากทั้ง 2 tables มีค่าเหมือนกัน Union จะแสดงแค่ตัวแต่เดียว แต่ Union All จะแสดงทั้งหมดไม่ว่าจะซ้ำกันกี่ตัว

    ใช้ Union ในการรวมข้อมูลจาก column ของ table Customers และ Suppliers
  • คำสั่ง Group By มักใช้ร่วมกับคำสั่งคำนวณต่างๆเช่น Count, Sum เป็นต้น โดยจะทำการรวมกลุ่มข้อมูลที่ต้องการมาแสดงผล

    ใช้ Group By เพื่อรวบ Country ที่ซ้ำมาแสดงผลเป็นอันเดียว
  • คำสั่ง Having มีการทำงานเหมือน Where คือกำหนดเงื่อนไข แต่สามารถเพิ่มการคำนวณลงในเงื่อนไขซึ่ง Where ไม่สามารถทำได้

    ใช้ Having ในการหาข้อมูลที่มีเงื่อนไขคือ ผลรวมของรหัสลูกค้าในประเทศต้องมากกว่า 5

  • คำสั่ง Exists จะใช้ร่วมกับ Where เพื่อแสดงข้อมูลที่ตรงตามเงื่อนไขคือ ต้องมีข้อมูลตรงตามที่ Exists กำหนดไว้เท่านั้น


    แสดงข้อมูล SupplierName เมื่อ มี ProductName ที่มี SupplierID ตรงกันทั้ง 2 tables และมีราคามากกว่า 20


  • คำสั่ง Any/All จะใช้ร่วมกับ Where หรือ Having โดย Any จะแสดงข้อมูลหากมีข้อมูลตัวใดตัวหนึ่งตรงตามที่เงื่อนไขต้องการ และ All จะแสดงข้อมูลเมื่อมีข้อมูลตรงตามที่ต้องการในเงื่อนไขทุกตัว

    ตัวอย่างการใช้ Any แสดงข้อมูลชื่อผลิตภัณฑ์หากมีรหัสผลิตภัณฑ์ตัวใดตัวหนึ่งที่มีค่าเท่ากับ 10

  • คำสั่ง Select Into ใช้สำหรับย้ายข้อมูลจากตารางหนึ่งไปอีกตารางหนึ่ง


    ใช้ Select Into ย้ายข้อมูลจาก Customers ไปที่ CustomersBackup2017


  • คำสั่ง Insert Into Select เป็นคำสั่งสำหรับคัดลอกข้อมูลที่เราต้องการไป Insert ใน table ที่เราต้องการโดยต้องมีรูปแบบที่ตรงกันถึงจะ Insert ได้


    ใช้คำสั่ง Insert Into Select ในการคัดลอกข้อมูลใน Suppliers ไปเพิ่มใน Customers


  • Null Function เป็นฟังค์ชันสำหรับใช้แก้ปัญหาข้อมูลที่เป็น Null หรือไม่มีข้อมูล

    ตัวอย่างใช้ Ifnull() โดยหากค่าในฟังค์ชันเป็น Null จะแทนที่ด้วย 0
  • การ Comment เป็นการบอกรายละเอียดหรือการทำงานของโค้ดส่วนนั้นๆเพื่อให้ง่ายต่อการแก้ไขหรือนำไปพัฒนาต่อ


ตัวอย่างการใช้ Comment

การใช้ DBMS

ตัวอย่างและวิธีการใช้งานของ MySQL Workbench สามารถดูได้ตามลิ้งค์ข้างต้น

https://docs.google.com/presentation/d/1wEolP6tf4BUR7281C-cBUWFAd23dXeVwt1_x7xMqRWc/edit#slide=id.g305d3c9174_1_125

Problem/Solution

  • การใช้งาน DBMS ของ MySQL บน Mac มีปัญหาการเปิด Server เนื่องจาก Version ไม่รองรับ แก้ไขโดยเลือกลง Version ที่ Support Mac โดยศึกษาเพิ่มเติมได้จากลิ้งค์ด้านบน

Decision

  • เลือกการทำงานของ DBMS เป็นการ import csv file ผ่านโปรแกรมโดยตรงแทนการเขียนโปรแกรมจากภายนอกเพื่อทำการ insert จากภายนอกเพื่อลดเวลาการทำงาน

Related Info/Link/Reference

  • SQL Tutorial : https://www.w3schools.com/sql/

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

Week 2 ( MySQL )

What have you done/learned

  • ได้ทดลองการสร้างฐานข้อมูลโดยใช้โปรแกรมของ MySQL ผ่านทาง MySQL Workbench โดยเริ่มจาการสร้างฐานข้อมูลก่อน เมื่อเข้าโปรแกรมมาแล้สวให้เลือกที่ที่ File > New Model



  • เมื่อเข้ามายังหน้าดังรูปแล้วเราสามารถเปลี่ยนชื่อของฐานข้อมูล, รหัสอักขระที่ต้องการให้รองรับ รวมไปถึงคอมเมนต์เพิ่มเติมได้โดยคลิกขวาที่ตัวฐานข้อมูลและเลือก Edit Schema


  • เมื่อแก้ไข้เรียบร้อยแล้วต่อไปจะเป็นการเพิ่มหน้า diagram ของ database โดยเลือกที่ Add Diagram ซึ่งจะนำมาสู่หน้าสำหรับออกแบบ Diagram

  • ต่อมาจะเป็นส่วนของการเพิ่มตารางฐานข้อมูลโดยให้เลือกที่ Add Table ในหน้าหลัก โดยเราสามารถตั้งชื่อตารางได้ตามที่ต้องการ เพิ่มหัวข้อในฐานข้อมูล รวมถึงกำหนดลักษณะและชนิดของข้อมูลในตารางนั้นๆได้ เช่น กำหนดให้ส่วน user_id เป็น primary key เป็นต้น



  • เราสามารถเชื่อมโยงข้อมูลในฐานข้อมูลได้โดยใช้ Foreign Key ในการเชื่อมตารางแต่ละตัวที่อยู่ในฐานข้อมูลซึ่งในแต่ละฐานข้อมูลที่จะเชื่อมกันนั้นต้องมีข้อมูลที่เป็นข้อมูลเดียวกัน


  • ในหน้าของ ERR Diagram เราสามารถนำตารางที่เราสร้างมาแสดงเพื่อดูความสัมพันธ์ของแต่ละตาราง รวมไปทั้งสามารถสร้างหรือลบตารางใหม่ได้เช่นกัน

Problem/Solution

  • การใช้งานโปรแกรมนั้นค่อนข้างยุ่งยาก และมีความซับซ้อนพอสมควร ต้องทำการศึกษาการทำงานของส่วนต่างๆรวมไปถึงวิธีการใช้และการประยุกต์ใช้เพิ่มเติม

Decision

  • เหตุผลที่เลือก MySQL สำหรับทำงานเนื่องจากต้องการศึกษาว่ารูปแบบการทำงานนั้น มีความคลอบคลุมกว่า ใช้งานได้ง่ายกว่า XAMPP ที่มี PHPMyAdmin หรือไม่

Related Info/link/reference

  • MySQL Workbench Tutorial : https://www.youtube.com/watch?v=RSHevYMwCVw
  • Download and Install MySQL : https://www.youtube.com/watch?v=WuBcTJnIuzo

Database Project

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