Database System 2/2560
วันเสาร์ที่ 31 มีนาคม พ.ศ. 2561
example of normalization
- 1NF ต้องไม่เป็น repeating group หรือมี multiple value attribute
โดยจากตัวอย่างนี้ Student_Grade_Report ยังมี multiple value attribute อยู่ นั่นคือ Course เพราะ Student 1 คน สามารถมีได้หลาย course ทำให้เป็น repeating group
วิธีการ - ลบ attribute ที่เป็น multiple value ออก
- นำไปสร้างตารางใหม่ คือ StudentCourse
- โดยใน StudentCourse มี primary key เป็น {StudentNo,CourseNo}
- 2NF attribute ควรขึ้นอยู่กับ primary key แบบ fully dependent ทุกตัว
จากการทำ 1NF มาแล้ว ทำให้ได้ตาราง StudentCourse มา ซึ่งในตารางนี้มีแค่ attribute Grade ที่เป็น fully dependent กับ primary key คือขื้นกับทั้ง StudentNo และ CourseNo แต่ CourseName, InstructorNo, InstructorName, InstructorLocation เป็น partial dependent คือขึ้นอยู่กับ CourseNo อย่างเดียว
วิธีการ - ลบ attribute ที่เป็น partial dependent ออก
- นำไปสร้างเป็นตารางใหม่คือ CourseInstructor
- โดยใน CourseInstructor มี primary key คือ CourseNo
- 3NF ต้องไม่มี transitive dependency คือ ในแต่ละ attribute ไม่มีการขึ้นต่อกันเป็นทอดๆ
จากการทำ 2NF มาแล้ว ทำให้ได้ตาราง CourseInstructor ซึ่ง InstructorName, InstructorLocation ขึ้นอยู่กับ InstructorNo ที่ขึ้นอยู่กับ CourseNo อีกทอดหนึ่ง
วิธีการ - ลบ attribute ที่เป็น transitive dependency
- นำไปสร้างเป็นตารางใหม่คือ Instructor
- โดยตาราง Instructor มี primary key คือ InstructorNo
- ตรวจสอบว่ายังมี transitive dependency อีกหรือไม่ สรุปคือไม่มีแล้วจึงไม่ต้องทำต่อ
วันอังคารที่ 27 มีนาคม พ.ศ. 2561
Guidline4
- ออกแบบ relation schema ให้มีความสัมพันธ์ที่เหมาะสม ระหว่าง attribute ที่เชื่อมกันด้วย primary key และ foreign key โดยต้องรับประกันได้ว่าจะไม่สร้าง tuple เทียม หรือก็คือหลีกเลี่ยงการจับคู่ attribute ที่ไม่ได้เชื่อมระหว่าง primary key กับ foreign key เพราะอาจจะทำให้เกิด tuple เทียมได้
วันอังคารที่ 20 มีนาคม พ.ศ. 2561
Code database (Postgres)
import psycopg2
import csv
import random
class Grade():
def __init__(self, file_data):
self.file_data = file_data
self.connection = psycopg2.connect("dbname='grade_db' user='postgres' host='localhost' password='fern36612'")
self.cursor = self.connection.cursor()
def create_table(self):
self.cursor.execute("CREATE TABLE IF NOT EXISTS student(number_id TEXT Primary Key, name TEXT, surename TEXT)")
self.connection.commit()
self.cursor.execute("CREATE TABLE IF NOT EXISTS transcript(subject TEXT, credit INTEGER, section INTEGER, grade TEXT, term INTEGER, number_id TEXT, FOREIGN KEY (number_id) REFERENCES student(number_id))")
self.connection.commit()
self.connection.close
def get_data(self):
n = 6900000000001
list_subject = ["010123101 INTRODUCTION TO COMPUTER", "010123102 PROGRAMMING FUNDAMENTALS", "040203111 ENGINEERING MATHEMATICS", "040313005 PHYSICS"]
list_grade = ["A", "B", "C", "D"]
for i in range(1000000):
self.insert_data(n, "Jessada", "Weeradetkumpon")
for j in range(40):
k = random.randint(0,3)
self.insert_grade(list_subject[k],"1", "1", list_grade[k], 1, n)
print(i,": success")
n+=1
self.connection.commit()
self.connection.close
def insert_data(self, number_id, name, surename):
sql = "INSERT INTO student (number_id, name, surename) VALUES (%s, %s, %s)"
self.cursor.execute(sql, (number_id, name, surename))
def insert_grade(self, subject, credit, section, grade, term, number_id):
sql = "INSERT INTO transcript (subject, credit, section, grade, term, number_id) VALUES(%s, %s, %s, %s, %s, %s)"
self.cursor.execute(sql, (subject, credit, section, grade, term, number_id))
def show_grade(self):
self.cursor.execute("SELECT * FROM grade Where number_id = '5801012620097'")
records = self.cursor.fetchall()
self.connection.close
for i in records:
print(i)
a = Grade('grade.csv')
#a.create_table()
#a.get_data()
#a.show_grade()
import csv
import random
class Grade():
def __init__(self, file_data):
self.file_data = file_data
self.connection = psycopg2.connect("dbname='grade_db' user='postgres' host='localhost' password='fern36612'")
self.cursor = self.connection.cursor()
def create_table(self):
self.cursor.execute("CREATE TABLE IF NOT EXISTS student(number_id TEXT Primary Key, name TEXT, surename TEXT)")
self.connection.commit()
self.cursor.execute("CREATE TABLE IF NOT EXISTS transcript(subject TEXT, credit INTEGER, section INTEGER, grade TEXT, term INTEGER, number_id TEXT, FOREIGN KEY (number_id) REFERENCES student(number_id))")
self.connection.commit()
self.connection.close
def get_data(self):
n = 6900000000001
list_subject = ["010123101 INTRODUCTION TO COMPUTER", "010123102 PROGRAMMING FUNDAMENTALS", "040203111 ENGINEERING MATHEMATICS", "040313005 PHYSICS"]
list_grade = ["A", "B", "C", "D"]
for i in range(1000000):
self.insert_data(n, "Jessada", "Weeradetkumpon")
for j in range(40):
k = random.randint(0,3)
self.insert_grade(list_subject[k],"1", "1", list_grade[k], 1, n)
print(i,": success")
n+=1
self.connection.commit()
self.connection.close
def insert_data(self, number_id, name, surename):
sql = "INSERT INTO student (number_id, name, surename) VALUES (%s, %s, %s)"
self.cursor.execute(sql, (number_id, name, surename))
def insert_grade(self, subject, credit, section, grade, term, number_id):
sql = "INSERT INTO transcript (subject, credit, section, grade, term, number_id) VALUES(%s, %s, %s, %s, %s, %s)"
self.cursor.execute(sql, (subject, credit, section, grade, term, number_id))
def show_grade(self):
self.cursor.execute("SELECT * FROM grade Where number_id = '5801012620097'")
records = self.cursor.fetchall()
self.connection.close
for i in records:
print(i)
a = Grade('grade.csv')
#a.create_table()
#a.get_data()
#a.show_grade()
วันอังคารที่ 6 กุมภาพันธ์ พ.ศ. 2561
hw4 ลอง PostgreSQL และ insert grade ของสมาชิก
ทดลองใช้งาน PostgreSQL
1. โหลดโปรแกรม และติดตั้ง เมื่อลองเปิดใช้งานจะเจอหน้า GUI ของ pgAdmin4
2. สร้าง database โดยการคลิกขวาที่ PostgreSQL 1.0 และเลือก Create >> Database
3. ตั้งชื่อ database ตามต้องการ ในที่นี้ตั้งชื่อว่า grade_db
4. การ connect กับ Python จะต้อง import psycopg2 โดยการ install ก่อนจะใช้คำสั่งว่า pip install psycopg2 ในโฟลเดอร์ที่เราได้ทำการติดตั้ง Python ไว้ จากนั้นเขียนโค้ดเพื่อ connect database
5. การ create table การ insert data และ show data สามารถใช้คำสั่งที่เหมือนกับ mySQL ได้เลย ทำให้มีความสะดวกมาก มีการปรับแก้โค้ดเล็กน้อยโดยการสร้าง table มา 2 table เพื่อเก็บข้อมูลที่มี Primary key และ Foreign key เป็นข้อมูลชื่อ และเกรดของสมาชิกทุกคนในกลุ่ม เมื่อทำการ insert เข้า database เรียบร้อยแล้ว จะได้ตารางดังนี้
1. โหลดโปรแกรม และติดตั้ง เมื่อลองเปิดใช้งานจะเจอหน้า GUI ของ pgAdmin4
5. การ create table การ insert data และ show data สามารถใช้คำสั่งที่เหมือนกับ mySQL ได้เลย ทำให้มีความสะดวกมาก มีการปรับแก้โค้ดเล็กน้อยโดยการสร้าง table มา 2 table เพื่อเก็บข้อมูลที่มี Primary key และ Foreign key เป็นข้อมูลชื่อ และเกรดของสมาชิกทุกคนในกลุ่ม เมื่อทำการ insert เข้า database เรียบร้อยแล้ว จะได้ตารางดังนี้
วันอังคารที่ 30 มกราคม พ.ศ. 2561
hw3 insert data to database
1. ใช้ python เป็นสื่อกลางในการจัดรูปแบบข้อมูลจากไฟล์ csv เพื่อเข้าไปเก็บข้อมูลยัง database ซึ่งใช้ MySQL
3. เข้า localhost/phpmyadmin เพื่อจัดการสร้างฐานข้อมูลใหม่ โดยกดปุ่ม new และ create database ขึ้นมาใหม่
5. โค้ดการทำงาน โดยใช้ pymysql เพื่อ connect ระหว่าง python กับ mysql สร้างคลาส Grade ขึ้นมา โดยมี method create_table เพื่อสร้างตาราง และ insert_data เพื่อใช้ในการเพิ่มฐานข้อมูลจากไฟล์ csv ไปยัง database
2. ใช้ XAMPP เพื่อจำลอง server โดยกด start ที่ apache และ MySQL
3. เข้า localhost/phpmyadmin เพื่อจัดการสร้างฐานข้อมูลใหม่ โดยกดปุ่ม new และ create database ขึ้นมาใหม่
4. รูปแบบ csv ที่ export มาจาก spreadsheet
5. โค้ดการทำงาน โดยใช้ pymysql เพื่อ connect ระหว่าง python กับ mysql สร้างคลาส Grade ขึ้นมา โดยมี method create_table เพื่อสร้างตาราง และ insert_data เพื่อใช้ในการเพิ่มฐานข้อมูลจากไฟล์ csv ไปยัง database
6. ผลลัพธ์ที่ได้ เมื่อกลับไปดูข้อมูลที่อยู้ใน database ผ่าน phpmyadmin
สิ่งที่ได้เรียนรู้
1. การเชื่อมต่อ การสร้างตาราง และ insert ข้อมูลไปยัง database ผ่าน python
2. การใช้งาน phpmyadmin
ปัญหา
1. มีปัญหาช่วง import pymysql แล้ว error แก้โดย install pymysql ลงในโฟลเดอร์ python
decision
1. เลือกใช้ python เพราะง่าย และเข้าใจ เพราะเคยเขียนบ่อย
2. เลือก mysql เพราะสามารถหา tutorial ในการนำมาศึกษาได้เยอะ
วันอังคารที่ 23 มกราคม พ.ศ. 2561
hw2 DBMS ทดลองใช้ MySQL
การจัดการ mysql ด้วย XAMPP และ phpMyAdmin
1. install XAMPP จะได้เครื่องมือที่ใช้สำหรับจำลอง web server โดยโปรแกรมตัวนี้จะมี MySQL ติดมาด้วย สามารถดาวน์โหลดได้จาก >> XAMPP
2. เมื่อใช้ XAMPP จะสามารถเข้าไปจัดการฐานข้อมูลได้ที่ phpMyAdmin
การ query data
ศึกษาหาความรู้ และทดลองใช้งานจาก w3schools โดยศึกษาในส่วน SQL Command
1. SELECT คือ การเลือกคอลัมน์ที่เราต้องการ
FORM คือ การเลือกตารางข้อมูล
2. WHERE คือการเพิ่มเงื่อนไขเข้าไป สำหรับการ SELECT
3. INSERT สำหรับ add ข้อมูลเข้า database
4. UPDATE สำหรับ เปลี่ยนแปลงข้อมูลใน database
5. DELETE สำหรับลบข้อมูลใน database
สิ่งที่ได้เรียนรู้
1. เรียนรู้คำสั่งการใช้งานพื้นฐานของ SQL
2. การใช้เครื่องมืออื่นๆ ที่ช่วยให้การตัดการฐานข้อมูลสะดวกยิ่งขึ้น อย่าง XAMPP และ phpmyadmin
3. การ install ติดตั้งโปรแกรม
ปัญหา
1. การ config ค่าใน XAMPP
การตัดสินใจ
1. เลือก MySQL เพราะ เคยใช้งานมาแล้ว และเป็นที่นิยม จึงหา tutorial ได้ง่าย
1. install XAMPP จะได้เครื่องมือที่ใช้สำหรับจำลอง web server โดยโปรแกรมตัวนี้จะมี MySQL ติดมาด้วย สามารถดาวน์โหลดได้จาก >> XAMPP
2. เมื่อใช้ XAMPP จะสามารถเข้าไปจัดการฐานข้อมูลได้ที่ phpMyAdmin
การ query data
ศึกษาหาความรู้ และทดลองใช้งานจาก w3schools โดยศึกษาในส่วน SQL Command
1. SELECT คือ การเลือกคอลัมน์ที่เราต้องการ
FORM คือ การเลือกตารางข้อมูล
2. WHERE คือการเพิ่มเงื่อนไขเข้าไป สำหรับการ SELECT
3. INSERT สำหรับ add ข้อมูลเข้า database
4. UPDATE สำหรับ เปลี่ยนแปลงข้อมูลใน database
5. DELETE สำหรับลบข้อมูลใน database
สิ่งที่ได้เรียนรู้
1. เรียนรู้คำสั่งการใช้งานพื้นฐานของ SQL
2. การใช้เครื่องมืออื่นๆ ที่ช่วยให้การตัดการฐานข้อมูลสะดวกยิ่งขึ้น อย่าง XAMPP และ phpmyadmin
3. การ install ติดตั้งโปรแกรม
ปัญหา
1. การ config ค่าใน XAMPP
การตัดสินใจ
1. เลือก MySQL เพราะ เคยใช้งานมาแล้ว และเป็นที่นิยม จึงหา tutorial ได้ง่าย
hw2 คำนวณเกรด ด้วย Python
1. จากงานในครั้งแรก ทำ spreadsheet ที่แสดงผลของเกรดในแต่ละเทอม
สามารถดูได้ที่นี่ >> spreadsheet
2. ทำการ download file เก็บเป็นไฟล์ csv
3. เขียนโค้ดภาษา Python เพื่อคำนวณหา GPA และ GPAX ในแต่ละเทอม
4. ผลลัพธ์ที่ได้
สิ่งที่ได้เรียนรู้
1. การใช้ Python อ่านไฟล์จาก csv
2. การใช้ export ตารางข้อมูลใน spreadsheet ออกมาในรูปแบบ csv
ปัญหา
1. ยังหาวิธีตัดทศนิยม 2 ตำแหน่ง โดยไม่ปัดค่าขึ้นไม่ได้ ทำให้ค่าผลลัพธ์ที่ได้ไม่ตรงกับ transcript
การตัดสินใจ
1. เลือกใช้ภาษา Python เพราะใช้ง่าย และเขียนได้ถนัดมากที่สุด
2. มีการปรับเปลี่ยนรูปแบบของ spreadsheet ต่างกับงานในครั้งแรก เพื่อให้ง่ายต่อการเก็บเป็น csv และนำค่ามาคำนวณ
สามารถดูได้ที่นี่ >> spreadsheet
4. ผลลัพธ์ที่ได้
สิ่งที่ได้เรียนรู้
1. การใช้ Python อ่านไฟล์จาก csv
2. การใช้ export ตารางข้อมูลใน spreadsheet ออกมาในรูปแบบ csv
ปัญหา
1. ยังหาวิธีตัดทศนิยม 2 ตำแหน่ง โดยไม่ปัดค่าขึ้นไม่ได้ ทำให้ค่าผลลัพธ์ที่ได้ไม่ตรงกับ transcript
การตัดสินใจ
1. เลือกใช้ภาษา Python เพราะใช้ง่าย และเขียนได้ถนัดมากที่สุด
2. มีการปรับเปลี่ยนรูปแบบของ spreadsheet ต่างกับงานในครั้งแรก เพื่อให้ง่ายต่อการเก็บเป็น csv และนำค่ามาคำนวณ
สมัครสมาชิก:
บทความ (Atom)