วันอาทิตย์ที่ 7 กุมภาพันธ์ พ.ศ. 2559

Assignment of W3

MySQL constraints


(what you have done)
ข้อบังคับของการใช้งาน MySql ได้แก่

1.PRIMARY KEY and UNIQUE Index Constraints

เนื่องจากการใช้คำสั่งเพื่อเปลี่ยน data อย่างเช่น INSERT หรือ UPDATE กับ data ที่เป็น primary-key, unique-key, หรือ foreign-key constraints อาจทำให้เกิด error ได้
ดังนั้น MySQL จึงมี IGNORE keywords ไว้ให้กับ key นั้น เมื่อเราเรียกใช้ INSERT หรือ UPDATE มันจะข้ามไปยัง row ต่อไปทันที 
ตัวอย่าง

ตารางของเรามีข้อมูลดังนี้

CREATE TABLE `file_names` (
`id` int(11) NOT NULL auto_increment,
`file_name` text NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `file_name` (`file_name`(200))
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

นี่คือ คำสั่งของเรา

INSERT IGNORE INTO `its_streamingdata`.`file_names` (`id` ,
`file_name`) VALUES (NULL , 'a'), (NULL , 'a')

ตารางของเราก็จะมี 1 แถว ที่มี filename ของ a

2.FOREIGN KEY Constraints

เราสามารถดึงข้อมูลแบบข้าม relate data จากตาราง อื่นๆได้เลย และยังทำให้ข้อมูลที่ดึงมานั้นมีความต่อเนื่อง
ตัวอย่าง

mysql> SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME 
     > FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
     > WHERE REFERENCED_TABLE_SCHEMA IS NOT NULL;
+--------------+---------------+-------------+-----------------+
| TABLE_SCHEMA | TABLE_NAME    | COLUMN_NAME | CONSTRAINT_NAME |
+--------------+---------------+-------------+-----------------+
| fk1          | myuser        | myuser_id   | f               |
| fk1          | product_order | customer_id | f2              |
| fk1          | product_order | product_id  | f1              |
+--------------+---------------+-------------+-----------------+
จะเห็นได้ว่า ข้อมูลที่เรา SELECT นั้นมาจากต่าง table กัน

3.Constraints on Invalid Data

วิธีการจัดการกับ Invalid Data ของ MySQL มีดังต่อนี้

- ถ้าเราพยายามใส่ค่าลงใน คอมลั่มจำนวน ที่เกินตาราง Mysql จะแทนที่ด้วยค่า 0 

- สำหรับ ข้อมูลชนิด string MySQL สามารถเก็บเป็น string ว่างๆ หรือ string ที่ยาวที่สุดเท่าที่จะเก็บในคอลั่มได้ 

- ถ้าพยายามจะเก็บ string ที่ไม่ได้ขึ้นต้นด้วยตัวเลข ลงใน คอลั่มจำนวน MySQL จะเก็บค่า 0 แทน

- Invalid ของ ENUM หรือ SET จะถูกจัดการตาม ENUM and SET Constraints

- MySQL ให้เก็บ data ที่อาจมีค่าไม่ถูกต้องลงในคอลั่ม DATE และ DATETIME ได้ เช่น '2000-02-31' กับ '2000-02-00 ขึ้นอยู่กับ Application ว่าจะให้ใช้ strict SQL mode หรือเปล่า

- ถ้าพยายามที่จะเก็บ NULL ในคอลั่มที่ไม่รับค่า NULL errror จะเกิดสำหรับคำสั่ง INSERT แบบแถวเดียว แต่สำหรับคำสั่ง INSERT แบบหลายๆแถว หรือคำสั่งอื่นๆ MySQL จะเก็บ implicit default value
สำหรับชนิดของข้อมูลในคอลั่มนั้น เช่น 0 สำหรับข้อมูลจำนวน '' สำหรับข้อมูลชนิด string

- ถ้าคำสั่ง INSERT ไม่ได้ระบุค่าใส่ลงในคอลั่ม MySQL จะใส่ค่า default ถ้า คอลั่มได้ระบุคำนิยาม รวมถึง explicit DEFAULT clause เอาไว้ แต่ถ้าไม่ได้ระบุ จะใส่ค่า DEFAULT ของ data type ในคอลั่มนั้นๆ

4.ENUM and SET Constraints

ENUM และ SET มีวิธีจัดการคอลั่มที่สามารถเก็บได้แค่ค่า set เท่านั้น

- ค่า ENUM ต้องอยู่ในรายชื่อที่ระบุไว้ตอนสร้างคอลั่ม ค่านั้นไม่สามารถเป็น ค่า error ได้ เช่น 0 หรือ string ว่างๆ เช่น สำหรับคอลั่มที่ตั้งเอาไว้ให้รับข้อมูล ENUM ('a','b','c') ข้อมูลอย่าง 'd' หรือ 'ax' ที่เขามา จะถูก reject ออกไป 

- ค่า SET ต้องเป็น string ว่างๆ หรือ มีค่าที่ระบุตามที่คอลั่มต้องการ แต่ละตัวคั่นด้วย , เช่น คอลั่มที่ระบุว่า SET('a','b','c') ค่าอย่าง  'd' หรือ 'a,b,c,d' จะถือว่า Invalid และถูก reject ออกไป

(any problem/solution)
ปัญหา
-
แก้ปัญหา
-

(decision)
- หาข้อมูลจากเว็ป official ของ MySQL

(related info/link/reference)
http://dev.mysql.com/doc/refman/5.7/en/constraints.html

โปรแกรม MySQL

โปรแกรม MySQL

   MySQL (มายเอสคิวแอล) เป็นระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (Relational Database Management System) โดยใช้ภาษา SQL แม้ว่า MySQL เป็นซอฟต์แวร์โอเพนซอร์ส แต่แตกต่างจากซอฟต์แวร์โอเพนซอร์สทั่วไป โดยมีการพัฒนาภายใต้บริษัท MySQL AB ในประเทศสวีเดน โดยจัดการ MySQL ทั้งในแบบที่ให้ใช้ฟรี และแบบที่ใช้ในเชิงธุรกิจ
   นอกจากนี้ MySQL เป็นที่นิยมใช้กันมากสำหรับฐานข้อมูลสำหรับเว็บไซต์ เช่น มีเดียวิกิ และ phpBB และนิยมใช้งานร่วมกับภาษาโปรแกรม PHP ซึ่งมักจะได้ชื่อว่าเป็นคู่ จะเห็นได้จากคู่มือคอมพิวเตอร์ต่างๆ ที่จะสอนการใช้งาน MySQL และ PHP ควบคู่กันไป นอกจากนี้ หลายภาษาโปรแกรมที่สามารถทำงานร่วมกับฐานข้อมูล MySQL ซึ่งรวมถึง ภาษาซี ซีพลัสพลัส ปาสคาล ซีชาร์ป ภาษาจาวา ภาษาเพิร์ล พีเอชพี ไพทอน รูบี และภาษาอื่น ใช้งานผ่าน API สำหรับโปรแกรมที่ติดต่อผ่าน ODBC หรือ ส่วนเชื่อมต่อกับภาษาอื่น (database connector) เช่น เอเอสพี สามารถเรียกใช้ MySQL ผ่านทาง MyODBC,ADO,ADO.NET เป็นต้น

ท่านสามารถดาวน์โหลดโปรแกรมได้ ที่นี่

หน้าตา และส่วนต่างๆของโปรแกรม


กด File >> New Model




วันอาทิตย์ที่ 24 มกราคม พ.ศ. 2559

ภาษา SQL (เบื้องต้น)

ภาษา SQL

   SQL (Structured Query Language) คือ ภาษาที่ใช้ในการเข้าถึง และจัดการกับฐานข้อมูล ซึ่งภาษา SQL เองก็มีอยู่หลายเวอร์ชั่นด้วยกัน

RDBMS (Relational Database Management System) หมายถึง ระบบที่จัดการความสัมพันธ์ของข้อมูล เช่น ข้อมูลใน RDBMS ถูกเก็บในรูปแบบของตาราง ฉะนั้นตารางจะเป็นตัวบอกความสัมพันธ์ของข้อมูลจากแถว และหลัก

ฐานข้อมูลส่วนใหญ่จะถูกเก็บในรูปแบบของตาราง โดยจะระบุชนิดของตารางด้วยชื่อตาราง หลักหมายถึงชนิดของข้อมูล และแถวหมายถึงข้อมูลที่บันทึก

การเขียนภาษา SQL 
ภาษา SQL จะมีคำสั่งที่เรียบง่าย ชัดเจนโดยจะมีข้อบังคับในการเขียน ดังนี้

1. ตัวพิมใหญ่ หรือพิมเล็ก ไม่มีความแตกต่างกัน

2. เมื่อเขียนจบ 1 คำสั่ง (1 statement) จะต้องปิดด้วย ; (Semicolon)

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


ใช้คำสั่ง Select เรียกข้อมูลที่ชื่อว่า Customers จาก ฐานข้อมูลที่เรามี (ช่องขวามือสุด) ผลที่ได้คือ ข้อมูลของลูกค้าแต่ละคน


คราวนี้เรียกข้อมูลที่ชื่อว่า Orders ด้วยคำสั่ง Select เช่นเคย แต่พิมพ์ด้วยตัวพิมพ์เล็กทั้งหมด ผลที่ได้คือ ข้อมูลการสั่งซื้อแต่ละครั้ง

คำสั่งที่นิยมใช้
Select - ดึงข้อมูลจากฐานข้อมูล
Update - อัพเดตฐานข้อมูล
Delete - ลบข้อมูลออกไปจากฐานข้อมูล
Insert Into - ใส่ข้อมูลใหม่ลงในฐานข้อมูล
Create Database - สร้างฐานข้อมูลใหม่
Alter Database - ปรับปรุงฐานข้อมูล
Create Table - สร้างตารางใหม่
Alter Table - ปรับปรุงตาราง
Drop Table - ลบตาราง
Create Index - สร้าง index (ตัวค้นหา)
Drop Index - ลบ index

วันเสาร์ที่ 23 มกราคม พ.ศ. 2559

ปัญหาการเรียกใช้ฟังก์ชั่นในไฟล์ .kv

การเขียนโปรแกรมด้วยภาษา Kivy
ปัญหาการเรียกใช้ฟังก์ชั่นในไฟล์ .kv

   ในการเขียนโปรแกรมด้วยภาษา kivy นั้น จะทำงานร่วมกับภาษา python โดยจะแบ่งหน้าที่กันเป็นสองส่วน เปรียบได้ว่า python จะเป็นตัวกำหนดการทำงาน ส่วน kivy จะระบุส่วนประกอบของหน้าโปรแกรม และ GUI (Graphic User Interface)

   GUI (Graphic User Interface) คือ ส่วนที่ทำงานติดต่อกับผู้ใช้ อ่านการกระทำ และไปใช้ในการประมวลผลต่างๆ เช่น เราออกแบบ Button เอาไว้ เมื่อมีการกดที่ปุ่มนี้ จะให้แสดงคำว่า "Hello" 

   วิธีการเขียนคำสั่งแบบนั้น ใน kivy จะเขียนได้ดังนี้

ใน python file

def Hello():
   text = "Hello"
   return text

ใน kivy file

Button:
   on_press: root.hello()

   ที่ขีดเส้นใต้เอาไว้ คือ ฟังก์ฃั่นที่ถูกสร้างอยู่ใน python file โดยฟังก์ชั่นนี้ไม่มีการรับพารามิเตอร์ 
   แต่ถ้าฟังก์ชั่นนั้นมีพารามิเตอร์เราสามารถใส่พารามิเตอร์ ในการเรียกใช้ได้เลย ตัวอย่างเช่น

ใน python file

def hello(name):
   text = "Hello "+name
   return text

ใน kivy file

Button:
   on_press: root.hello("Somruk")

   แต่ถ้าพารามิเตอร์ที่เราจะเรียกใช้เป็น attribute ที่มีอยู่แล้ว และไปเรียกใช้ฟังก์ชั่นใน kivy ซึ่ง kivy ไม่ได้รู้จัก attribute นั้น จะทำให้ผลลัพท์ที่ได้ผิดพลาดไป ยกตัวอย่างจากผลงานของผู้เขียน

   โปรแกรมรับข้อมูลชื่อจาก textinput และไปเพิ่ม ชื่อใน List



จากรูป ที่ตรงกลาง มีการเรียกใช้ฟังก์ชั่น addStudent และ พารามิเตอร์เป็น attribute ใน python ผลที่ได้คือ


 
   วิธีการแก้ คือ ให้เราเรียกใช้ ฟังก์ชั่นนี้ ใน python ไฟล์ เพื่อให้ฟังก์ฃั่นนั้น รู้ัจัก attribute



   ในที่นี้ได้เรียกผ่านฟังก์ชั่นที่ชื่อว่า OpenFile
   ผลที่ได้
   

   จะเห็นว่าผลลัพท์สอดคล้องกับข้อมูลที่ใส่เข้าไป