วันจันทร์ที่ 26 มีนาคม พ.ศ. 2561

Guideline 4


Guideline 4

1. ออกแบบ schema ของความสัมพันธ์ให้เข้ากับเงื่อนไขที่ว่า แต่ละ attribute ต้องเท่ากัน และมีความสัมพันธ์กันแบบเหมาะสม เพื่อรับประกันว่าจะไม่มีการสร้าง tuples ที่ไม่ถูกต้อง

2. หลีกเลี่ยงความสัมพันธ์ที่มีการจับคู่ attribute ที่ไม่ได้เกิดจากการรวมกันของ foreign key และ primary key

ที่มา: http://comet.lehman.cuny.edu/jung/cmp420758/chapter15.pdf

Summary of performance comparisons


- Operation System Windows 10 Education 64-bit 
- Hardware Ram 8 GB 
- Intel(R) Core(TM) i7-6500U CPU @ 2.50GHz (4 CPUs), ~2.6 GHz 
- HDD 1000 GB

1. Insert 8M * 40 Rows (นักเรียน 8 ล้านคน เรียนคนละ 40 วิชา)
2. ใช้ Python 3.7.0b1 
3. run ใน Sublime Text


ใช้เวลา 31 นาที 32 วินาที


ได้ขนาดไฟล์ 18.5 GB ซึ่งคิดเป็น 2.3125 เท่าของ Ram

ซึ่งใช้เวลาในการ Query วิชาและเกรดของนักเรียน 1 คน = 127 ms


- Operation System Windows 10 Education 64-bit 
- Hardware Ram 8 GB 
- Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz 
- HDD 520 GB

1. Insert 4M * 40 Rows (เนื่องจาก 8M ใช้เวลานานเกินไป จึงลดเหลือเพียง 4M)
2. ใช้ Python 3.6.0 
3. run ใน Sublime Text


ใช้เวลา 8 ชั่วโมง


ได้ไฟล์ขนาด 8.12 GB คิดเป็น 1.015 เท่าของ RAM

ซึ่งใช้เวลาในการ Query วิชาและเกรดของนักเรียน 1 คน = 8 นาที

ด้วยความสงสัยว่า เหตุผลที่ช้า เกิดจากคอมหรือตัว Database ที่ใช้ จึงได้ลองทำการใช้ SQLite แทน


ได้ผลว่า ใช้เวลา 30 นาที 28 วินาที ซึ่งเร็วกว่า ดังนั้นจึงสรุปได้ว่า ProgreSQL ช้ากว่า SQLite


- Operation System Windows 10 Education 64 bit 
- Hardware Ram 8 GB 
- Intel(R) Core(TM) i7-4710HQ CPU @ 2.50GHz, 2501 Mhz, 4 Core(s), 8 Logical Processor(s) 
- HDD 1000 GB

1. Insert 4M * 40 Rows
2. Python 3.6.4 
3. Run with Command Prompt


ใช้เวลาในการสร้างไฟล์ 9 ชั่วโมง 18 นาที

ใช้เวลาในการ Query 94 ms


ผลการเปรียบเทียบสรุปได้ดังนี้

Team Project

Resort Management System (จัดระบบที่พัก)


ความสามารถของโปรแกรม

1. ตรวจสอบข้อมูลผู้ใช้งาน
2. สร้างใบเสร็จให้กับลูกค้า (คิด)

คุณสมบัติต่างๆของโปรแกรม

1. Adding/Querying customer’s information
- เลขประจำตัวประชาชน 
- ชื่อ 
- นามสกุล 
- บริษัท (นักธุรกิจ) 
- Passport number (สำหรับ ชาวต่างชาติ) 
- วัน-เวลา เข้าพัก/ออก

2. TYPES OF CUSTOMER
- ลูกค้ารายเดือน 
- ลูกค้ารายวันแบบชั่วคราว(3 ชั่วโมง) 
- ลูกค้ารายวันแบบค้างคืน 
- ลูกค้า contact

3. SPECIAL CONDITIONS

3.1 ลูกค้ารายวัน 
- เข้าพัก 5 ครั้ง ได้รับส่วนลด 50 บาท ในครั้งถัดไป หรือเก็บไว้ในภายหลังได้ 
- เข้าพัก 15 ครั้ง พักฟรี 1 ครั้ง 
- ส่วนลดมีอายุ 1 ปี 
- (สามารถสร้าง option เพิ่มได้)

3.2 ลูกค้า contact ที่ทำสัญญาไว้ 
- สามารถ key ชื่อบริษัทได้ 
- มีสองราคา 450 บาท และ 500 บาท **ราคาเต็ม 550 บาท** 
- ทำฟังก์ชั่นเพิ่มราคาได้ 
- (ถ้า query แล้วจะแสดงราคาที่ทำสัญญาไว้)

3.3 ลูกค้าประจำที่เคยได้รับส่วนลด 50 บาท
- สามารถดูประวัติได้

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

ER to Relational Mapping - Algorithm : 7 Steps



7-Step process:
  1. Map Regular Entity type
  2. Map Weak Entity type
  3. Map Binary 1:1 Relation type
  4. Map Binary 1:N Relationship type
  5. Map Binary M:N Relationship type
  6. Map Multivalued attributes
  7. Map N-ary Relationship type



Step 1 คือการแมพ Entity ปกติ หรือก็คือ Entity ที่ไม่ใช่ Weak ทั้งหมด โดยเราจะทำการสร้างตารางขึ้นมาสำหรับ Entity นั้นๆ ซึ่งสมาชิกในตารางก็คือ Attribute ต่างๆใน Entity นั้นๆ โดย Attribute ที่ถูกขีดเส้นใต้นั้น เป็น Key Attribute ที่อาจจะเป็น Primary Key ในอนาคต



Step 2 คือการแมพ Entity ที่เป็น Weak ทั้งหมด ซึ่งเราจะนำ Entity ด้านที่ติดกับเส้นขนาน 2 เส้นมาสร้างตาราง ในที่นี้คือ section ซึ่งตัว Entity นั้นจะต้องสร้าง Foreign key เพื่อมาชี้ที่ Primary Key ของ Entity อีกตัว


Step 3 คือการแมพความสัมพันธ์ที่เป็นแบบ One to One ซึ่งในตัวอย่างไม่มี แต่หากมีเราสามารถเลือก Entity ด้านใดก็ได้มาสร้างตาราง


Step 4 คือการแมพความสัมพันธ์ที่เป็นแบบ One to Many โดยเราจะเลือก Entity ด้านที่เป็น Many มา สร้างตาราง ซึ่งในภาพคือ student จากนั้น student จะสร้าง Foreign key มาชี้ที่ Primary Key ของ department ดังในภาพ Foreign key ของ sudent คือ dname และ Primary Key คือ dept_name นั่นเอง


ความสัมพันธ์ต่อมาคือ advisor โดยที่ sudent ยังคงเป็นด้าน Many เหมือนเดิม ดังนั้น student จะทำการสร้าง Foreign key อีกครั้ง ซึ่งก็คือ i_id ชี้ไปที่ Primary Key ของ instructor นั่นก็คือ ID นั่นเอง


ความสัมพันธ์ต่อมาคือ course_dept โดยที่ course คือด้าน Many ดังนั้น course จึงสร้าง Foreign key ขึ้นมาคือ dpt_name ชี้ไปที่ Primary Key ที่ department นั่นก็คือ dept_name นั่นเอง


ความสัมพันธ์ต่อมาคือ inst_dept โดยที่ instructor คือด้าน Many ดังนั้น instructor จึงสร้าง Foreign key ขึ้นมาคือ dpment_name ชี้ไปที่ Primary Key ของ department นั่นก็คือ dept_name เช่นกัน


ความสัมพันธ์ต่อมาคือ sec_class โดยที่ section เป็นด้าน Many ดังนั้น section จึงสร้าง Foreign key ขึ้นมาคือ class_building ซึ่งชี้ไปที่ Primary Key ของ classroom นั่นก็คือ building นั่นเอง


ความสัมพันธ์สุดท้ายของ 1:N คือ sec_time_slot โดยที่ด้าน section เป็น Many จึงสร้าง Foreign key ขึ้นมาคือ time_id ซึ่งชี้ไปที่ Primary Key ของ time_slot นั่นก็คือ tome_slot_id นั่นเอง



Step 5 คือการแมพความสัมพันธ์แบบ M:N ซึ่งเราจะนำตัวความสัมพันธ์ที่เชื่อมระหว่าง Entity ใดๆ 
มาสร้างตาราง โดยใช้ Key จากทุก Entity ที่เชื่อมกันอยู่มาเป็นสมาชิกในตาราง ดังตัวอย่างคือนำ prereq มาสร้างตารางโดยสมาชิกในตารางคือ reqc_id ซึ่งเป็น key จาก course ที่เป็น entity ที่เชื่อมอยู่กับความสัมพันธ์นี้ (แต่ในกรณีนี้เราต้องนำ key ของวิชาที่เรียนก่อนหน้ามาเป็นสมาชิกในตารางด้วย)


ความสัมพันธ์ต่อมาคือ teaches โดยที่สมาชิกในตารางประกอบไปด้วย i_id ซึ่งเป็น key จากของ instructor และ s_id ซึ่งเป็น key จากของ section และ s_semester ซึ่งเป็น key จากของ section เช่นกัน และสุดท้าย c_id ซึ่งเป็น key จากของ course


ความสัมพันธ์สุดท้ายของ M:N คือ takes ซึ่งสมาชิกในตารางประกอบไปด้วย st_id, s_id, s_semester, c_id, grade ซึ่งเป็น key จาก student, section, course และ grade ที่เป็น entity ของ takes ตามลำดับ


Step 6 คือการแมพ attributes ที่เป็น multivalued หรือ attributes ที่เป็นวงรี 2 วงล้อมรอบกัน โดยในตัวอย่างไม่มี แต่หากมี เราจะสร้างตารางจากตัว attributes ขึ้นมา ซึ่งสมาชิกในตารางก็คือ key ของ entity ที่ attributes นั้นๆอยู่นั่นเอง (อธิบายเพิ่มเติม Multivalued Attribute ก็คือ Attribute ที่สามารถมีได้หลายค่า เช่น เบอร์มือถือ 1 คน อาจมีเบอร์มือถือได้หลายเบอร์ เป็นต้น)


Step 7 คือการแมพความสัมพันธ์แบบ N-ary ซึ่งในตัวอย่างไม่มี


หากนำทั้ง 7 Steps ที่ทำไปทั้งหมด มาสร้างตารางความสัมพันธ์จะได้ดังนี้ โดยเส้นแต่ละเส้น คือเส้นที่ชี้จาก Foreign key แต่ละตัวไปหา Primary Key ของตัวมันเอง

ความสำคัญของ Database

เนื่องจากความเข้าใจผิดเกี่ยวกับการสั่งงาน ด้วยอาจารย์ต้องการให้คิดโปรเจคที่จะทำให้เกิดประโยชน์โดยใช้ Database แต่เกิดการเข้าใจว่า ให้หาข้อมูลเกี่ยวกับประโยชน์ของ Database ซึ่งเป็นผลดีคือ ทำให้ทราบเกี่ยวกับประโยชน์ของ Database ที่แท้จริงก่อนการทำงาน ซึ่งจะกล่าวต่อไปนี้


ประโยชน์ของ Database ต่อประเทศไทย

- ลดการเก็บข้อมูลที่ซ้ำซ้อน ข้อมูลบางชุดที่อยู่ในรูปของแฟ้มข้อมูลอาจมีปรากฏอยู่หลาย ๆ แห่ง เพราะมีผู้ใช้ข้อมูลชุดนี้หลายคน เมื่อใช้ระบบฐานข้อมูลแล้วจะช่วยให้ความซ้ำซ้อนของข้อมูลลดน้อยลง

- รักษาความถูกต้องของข้อมูล เนื่องจากฐานข้อมูลมีเพียงฐานข้อมูลเดียว ในกรณีที่มีข้อมูลชุดเดียวกันปรากฏอยู่หลายแห่งในฐานข้อมูล ข้อมูลเหล่านี้จะต้องตรงกัน ถ้ามีการแก้ไขข้อมูลนี้ทุก ๆ แห่งที่ข้อมูลปรากฏอยู่จะแก้ไขให้ถูกต้องตามกันหมดโดยอัตโนมัติด้วยระบบจัดการฐานข้อมูล

- การป้องกันและรักษาความปลอดภัย (Security) ให้กับข้อมูลทำได้อย่างสะดวก การป้องกันและรักษาความปลอดภัยกับข้อมูลระบบฐานข้อมูลจะให้เฉพาะผู้ที่เกี่ยวข้องเท่านั้น ซึ่งก่อให้เกิดความปลอดภัย(Security) ของข้อมูลด้วย

ที่มา: http://www.9experttraining.com


ประโยชน์ของ Database ต่อตัวเรา

- ฐานข้อมูลในโรงเรียน จะเป็นการรวบรวมข้อมูลเกี่ยวกับนักเรียน ครู ภารโรง พัสดุ สิ่งของ ฯลฯ อาจบันทึกข้อมูลลงกระดาษ แบบฟอร์มหรือจัดเก็บลงคอมพิวเตอร์ เมื่อมีการจัดเก็บข้อมูลอย่างเป็น ระเบียบ การค้นหาก็ทำได้ง่าย

- ฐานข้อมูลของร้านค้า เมื่อมีการจัดเก็บข้อมูลเกี่ยวกับสินค้าและลูกค้าอย่างเป็นระบบดีแล้ว การ จัดการก็ง่าย สินค้ามีกี่รายการ ต้นทุน กำไรเท่าไร ก็ดูได้ทันที ในโลกธุรกิจ การมีข้อมูลจำนวนมากและมี การจัดการที่ดี มีผลต่อความได้เปรียบในการทำธุรกิจและการประสบความสำเร็จ

- ฐานข้อมูลบัญชีครัวเรือน จะเป็นการรวบรวมข้อมูลเกี่ยวกับรายรับ-รายจ่ายในการใช้เงินในแต่ละวันของครัวเรือน ค่าใช้จ่ายที่เกี่ยวข้อง ฯลฯ อาจบันทึกข้อมูลลงกระดาษ แบบฟอร์มหรือจัดเก็บลงคอมพิวเตอร์ เมื่อมีการจัดเก็บข้อมูลอย่างเป็น ระเบียบ การค้นหาก็ทำได้ง่าย

- ฐานข้อมูลสมาชิกสหกรณ์ จะเป็นการรวบรวมข้อมูลเกี่ยวกับเงินที่ได้รับจากการออมเงินของสมาชิกในแต่ละวัน และจะมีการบันทึกอย่างต่อเนื่อง หากมีค่าใช้จ่ายเกี่ยวกับสหกรณ์ก็จะมีการลงบันทึกไว้และมีการเก็บใบเสร็จไว้เป็นหลักฐาน ฯลฯ อาจบันทึกข้อมูลลงกระดาษ แบบฟอร์มหรือจัดเก็บลงคอมพิวเตอร์ เมื่อมีการจัดเก็บข้อมูลอย่างเป็น ระเบียบ การค้นหาก็ทำได้ง่าย

- ฐานข้อมูลระบบห้องสมุด ยืม-คืน จะเป็นการจัดการเกี่ยวกับการยืม-คืนหนังสือ ให้ง่ายต่อการค้นหา จะมีข้อมูลที่เกี่ยวข้อง เช่น ข้อมูลหนังสือ ข้อมูลการยืม ข้อมูลการคืน รหัสและประเภทหนังสือ ฯลฯ ทำให้ค้นหาได้ง่ายขึ้น

ที่มา: http://ac2-009.blogspot.com/2012/07/5.html

จะเห็นได้ว่าการใช้ Database นั้น มีประโยชน์ที่หลากหลายด้าน อยู่ที่เราจะใช้ Database มาเป็นประโยชน์ในด้านไหน และเป็นประโยชน์มากน้อยเพียงใด


ER Diagram

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


จากภาพคือการเรียกชื่อของสัญลักษณ์ต่างๆ ในแต่ละแบบ ซึ่งบางแบบอาจมีชื่อเรียกเดียวกันแต่คนละสัญลักษณ์


ภาพตัวอย่างโจทย์ปัญหา ER Diagram


อธิบายการดู Degree และ Cardinalrity Ratio
Degree สามารถดูได้จากจำนวน Entity ในที่นี้มี Entity ทั้งหมด 2 Entity นั่นคือ student และ instructor
จึงกล่าวได้ว่าความสัมพันธ์ advisor นี้ มี Degree คือ Binary นั่นเอง
Cardinalrity Ratio สามารถดูได้จากเส้นของความสัมพันธ์ ในที่นี้ความสัมพันธ์จาก student ไปหา instructor เป็นแบบ นักเรียน 1 คน สามารถมีผู้สอนได้ 1 คน ในทางตรงกันข้าม ผู้สอน 1 คนสามารถมีนักเรียนได้มากกว่า 1 คน ดังนั้น ความสัมพันธ์นี้ จึงมี Cardinalrity Ratio เป็นแบบ 1:N ซึ่งอ่านว่า one to many นั่นเอง


อีก 1 ตัวอย่างซึ่งมี Degree เป็น Binary เช่นกัน ดูได้จากมี Entity จำนวน 2 Entity แต่ในตัวอย่างนี้ เป็นความสัมพันธ์ที่ ตอนเรียน 1 ตอน สามารถมีผู้สอนได้มากกว่า 1 คน และในทางเดียวกัน ผู้สอน 1 คน ก็สามารถสอนได้ในหลายตอนเรียน ดังนั้น Cardinalrity Ratio แบบนี้จึงเรียกว่า N:M อ่านว่า Many to Many นั่นเอง


จากที่อธิบายไปข้างต้น มาดูในตัวอย่างจากโจทย์ปัญหา ซึ่งเป็นความสัมพันธ์ advisor ระหว่าง student และ instructor ซึ่งเป็นความสัมพันธ์แบบ 1:N และมี Degree เป็น Binary โดยที่ในภาพจะสื่อให้เห็นว่า แต่ละ Entity นั้น มี ID เป็น key attribute อยู่ (แต่ละรูปวงรีเราเรียกว่า attribute) ซึ่ง key attribute เป็นสิ่งที่ไม่สามารถซ้ำกันได้


ในภาพข้างต้นเป็นความสัมพันธ์ inst_dept ระหว่าง instructor และ department ซึ่งมีความสัมพันธ์แบบ 1:N เช่นกัน และมี Degree เป็น Binary เช่นกัน แต่ในภาพจะสื่อให้เห็นถึง ความสัมพันธ์ที่มีเส้น 2 เส้นขนานกัน โยงหา Entity ซึ่งจะสื่อถึงว่า instructor (ตัวที่ติดกับเส้น 2 เส้นขนานกัน) จำเป็นต้องมี department (ตัวที่ไม่ได้ติดกับเส้น 2 เส้นขนานกัน) กล่าวคือ ผู้สอนแต่ละคนจำเป็นต้องมีแผนกเป็นของตัวเอง แต่ในแผนกแต่ละแผนกนั้น ไม่จำเป็นต้องมีผู้สอนก็ได้

Link Video Presentation Resort Managemant System Project.

Video Presentation Resort Managemant System Project. จัดทำโดย พากษ์เสียง: คุณาสิน  ทองมณี  5801012620011 ลำดับภาพ: สุพิชชา  ศรีศิริ...