วันอังคารที่ 4 พฤศจิกายน พ.ศ. 2557

รูปแบบของระบบฐานข้อมูล


รูปแบบของระบบฐานข้อมูล มีอยู่ด้วยกัน 3 ประเภท คือ

1. ฐานข้อมูลเชิงสัมพันธ์ (Relational Database)

เป็นการเก็บข้อมูลในรูปแบบที่เป็นตาราง (Table) หรือเรียกว่า รีเลชั่น (Relation) มีลักษณะเป็น 2 มิติ คือเป็นแถว (row) และเป็นคอลัมน์ (column) การเชื่อมโยงข้อมูลระหว่างตาราง จะเชื่อมโยงโดยใช้แอททริบิวต์ (attribute) หรือคอลัมน์ที่เหมือนกันทั้งสองตารางเป็นตัวเชื่อมโยงข้อมูล ฐานข้อมูลเชิงสัมพันธ์นี้จะเป็นรูปแบบของฐานข้อมูลที่นิยมใช้ในปัจจุบัน ดังตัวอย่าง

พนักงาน


รหัสพนักงาน
ชื่อพนักงาน
ที่อยู่
เงินเดือน
รหัสแผนก
12501535

12534568
12503452
12356892
15689730
นายสมพงศ์

นายมนตรี
นายเอก
นายบรรทัด
นายราชัน
กรุงเทพ

นครปฐม
กรุงเทพ
นนทบุรี
สมุทรปราการ
12000

12500
13500
11500
12000
VO

VN
VO
VD
VA



รูปแสดงตารางพนักงาน
2. ฐานข้อมูลแบบเครือข่าย (Network Database)ฐาน ข้อมูลแบบเครือข่ายจะเป็นการรวมระเบียนต่าง ๆ และความสัมพันธ์ระหว่างระเบียนแต่จะต่างกับฐานข้อมูลเชิงสัมพันธ์ คือ ในฐานข้อมูลเชิงสัมพันธ์จะแฝงความสัมพันธ์เอาไว้ โดยระเบียนที่มีความสัมพันธ์กันจะต้องมีค่าของข้อมูลในแอททริบิวต์ใดแอ ททริบิวต์หนึ่งเหมือนกัน แต่ฐานข้อมูลแบบเครือข่าย จะแสดงความสัมพันธ์อย่างชัดเจน ตัวอย่างเช่น

3. ฐานข้อมูลแบบลำดับชั้น (Hierarchical Database)
ฐาน ข้อมูลแบบลำดับชั้น เป็นโครงสร้างที่จัดเก็บข้อมูลในลักษณะความสัมพันธ์แบบพ่อ-ลูก (Parent-Child Relationship Type : PCR Type) หรือเป็นโครงสร้างรูปแบบต้นไม้ (Tree) ข้อมูลที่จัดเก็บในที่นี้ คือ ระเบียน (Record) ซึ่งประกอบด้วยค่าของเขตข้อมูล (Field) ของเอนทิตี้หนึ่ง ๆ

ฐานข้อมูลแบบลำดับชั้นนี้คล้ายคลึงกับฐานข้อมูลแบบเครือข่าย แต่ต่างกันที่ฐานข้อมูลแบบลำดับชั้น มีกฎเพิ่มขึ้นมาอีกหนึ่งประการ คือ ในแต่ละกรอบจะมีลูกศรวิ่งเข้าหาได้ไม่เกิน 1 หัวลูกศร

MySQL Data Type

Data Type ใน MySQL เราแบ่งหลักๆได้เป็น 3 ประเภท คือ
  1. Numeric เอาไว้จัดเก็บตัวเลข
  2. Date and Time เอาไว้จัดเก็บ วัน , เวลา
  3. String เอาไว้จัดเก็บ ตัวหนังสือ ตัวอักษรต่างๆ
ประเภท Numeric มีดังนี้
Type
คำอธิบาย
ขนาดพื้นที่
ที่ใช้เก็บ
TINYINT(M) สำหรับเก็บข้อมูลชนิดตัวเลข จำนวนเต็มไม่มีทศนิยม
signed คือ  -128 ถึง 127
unsigned คือ 0 ถึง 255
1 bytes
SMALLINT(M) สำหรับเก็บข้อมูลชนิดตัวเลข จำนวนเต็มไม่มีทศนิยม
signed คือ -32768 ถึง 32767
unsigned คือ 0 ถึง 65535
2 bytes
MEDIUMINT(M) สำหรับเก็บข้อมูลชนิดตัวเลข จำนวนเต็มไม่มีทศนิยม
signed คือ -8388608 ถึง 8388607
unsigned คือ 0 ถึง 16777215
3 bytes
INT(M) สำหรับเก็บข้อมูลชนิดตัวเลข จำนวนเต็มไม่มีทศนิยม
signed คือ -2147483648 ถึง 2147483647
unsigned คือ 0 ถึง 4294967295
4 bytes
BIGINT(M) สำหรับเก็บข้อมูลชนิดตัวเลข จำนวนเต็มไม่มีทศนิยม
signed คือ -9223372036854775808 ถึง 9223372036854775807
unsigned คือ 0 ถึง 18446744073709551615
8 bytes
FLOAT(M,D) สำหรับเก็บข้อมูลชนิดตัวเลขมีทศนิยม
signed คือ -3.402823466E+38 ถึง -1.175494351E-38, 0
unsigned คือ 1.175494351E-38 ถึง 3.402823466E+38
4 bytes
DOUBLE(M,D) สำหรับเก็บข้อมูลชนิดตัวเลขมีทศนิยม
signed คือ -1.7976931348623157E+308 ถึง -2.2250738585072014E-308, 0
unsigned คือ 2.2250738585072014E-308 ถึง 1.7976931348623157E+308
8 bytes
DECIMAL(M,D) เปลี่ยน แปลงได้ ขึ้นอยู่กับความยาวของตัวเลข (M) ค่าที่ระบุจำนวนตัวเลขที่ต้องการเก็บ เช่น (M) คือ 30 ก็เก็บเลขได้ 30 หลัก (ตั้งแต่ MySQL 5.0.3) สูงสุดที่ 30 หลัก (M+7)/8
BIT (M) ใส่ค่า bit ใส่ได้ ตั้งแต่ 1 ถึง 64 (ตั้งแต่ MySQL 5.0.3)  
สำหรับค่าตัวเลขสามารถกำหนดความยาวของตัวเลขและจำนวนหลังจุดทศนิยมได้ ขึ้นอยู่กับเป็นข้อมูลชนิดใด ในที่นี้จะแทนด้วยตัว

M คือ ค่าความยาวของตัวเลขรวมจุดทศนิยม
D คือ จำนวนตัวเลขหลังจุดทศนิยม

  • unsigned คือ ไม่ติดลบ หรือไม่มีเครื่องหมาย
  • unsigned zerofill คือ ไม่ติดลบ แต่ว่าหากข้อมูลที่กรอกเข้ามาไม่ครบตามจำนวน หลักที่เรากำหนด ตัว MySQL จะทำการเติม 0 ให้ครบหลักเอง เช่น ถ้ากำหนดให้ใส่ได้ 3 หลัก แล้วทำการเก็บข้อมูล 25 เข้าไป เวลาที่สืบค้นดู เราจะได้ค่าออกมาเป็น 025
  • signed คือ ค่าติดลบ หรือมีเครื่องหมาย
ปกติที่เราสร้าง field จะถูกกำหนดเป็น signed โดยอัตโนมัติครับ
ประเภท Date and Time มีดังนี้
Type
คำอธิบาย
ขนาดพื้นที่
ที่ใช้เก็บ
DATE สำหรับเก็บข้อมูลประเภทวันที่ โดยเก็บได้จาก 1 มกราคม ค.ศ. 1000 ถึง 31 ธันวาคม ค.ศ. 9999 โดยจะแสดงผลในรูปแบบ YYYY-MM-DD 3 bytes
TIME สำหรับเก็บข้อมูลประเภทเวลา มีค่าได้ตั้งแต่ -838:59:59 ไปจนถึง 838:59:59 โดยจะแสดงผล ออกมาในรูปแบบ HH:MM:SS 3 bytes
DATETIME สำหรับ เก็บข้อมูลประเภทวันที่ และเวลา โดยจะเก็บได้ตั้งแต่ 1 มกราคม ค.ศ. 1000 เวลา 00:00:00 ไปจนถึง 31 ธันวาคม ค.ศ. 9999 เวลา 23:59:59 โดยรูปแบบการแสดงผล เวลาที่ทำการสืบค้น (query) ออกมา จะเป็น YYYY-MM-DD HH:MM:SS 8 bytes
TIMESTAMP[(M)] สำหรับ เก็บข้อมูลประเภทวันที่ และเวลาเช่นกัน แต่จะเก็บในรูปแบบของ YYYYMMDDHHMMSS หรือ YMMDDHHMMSS หรือ YYYYMMDD หรือ YYMMDD แล้วแต่ ว่าจะระบุค่า M เป็น 14, 12, 8 หรือ 6 ตามลำดับ สามารถเก็บได้ตั้งแต่วันที่ 1 มกราคม ค.ศ. 1000 ไป จนถึงประมาณปี ค.ศ. 2037 4 bytes
YEAR[(2|4)] สำหรับ เก็บข้อมูลประเภทปี ในรูปแบบ YYYY หรือ YY แล้วแต่ว่าจะเลือกโดยหากเลือกเป็น 4 หลัก จะเก็บค่าได้ตั้งแต่ ค.ศ. 1901 ถึง 2155 แต่ หากเป็น 2 หลัก จะเก็บตั้งแต่ ค.ศ. 1970 ถึง 2069 1 bytes

ประเภท String  มีดังนี้
Type
คำอธิบาย
ขนาดพื้นที่
ที่ใช้เก็บ
CHAR(M) สำหรับเก็บข้อมูลประเภทตัวอักษร ขนาดตามค่า M แต่ไม่เกิน 255 ตัวอักษร M bytes
VARCHAR(M) สำหรับ เก็บข้อมูลประเภทตัวอักษร ทุกครั้งที่เลือกชนิดของฟิลด์เป็นประเภทนี้ จะต้องมี การกำหนดความยาวของข้อมูลลงไปด้วย ซึ่งสามารถกำหนดค่าได้ตั้งแต่ 1 - 255 ฟิลด์ชนิดนี้ เหมาะ สำหรับการเก็บข้อมูลสั้นๆ เช่น ชื่อ นามสกุล (ตั้งแต่ MySQL เวอร์ชั่น 5.0.3 ขึ้นไปสามารถเก็บได้ 0 – 65,535 ตัวอักษร) L+1 / L+2 bytes
TINYTEXT เป็น case-insensitive สามารถเก็บข้อมูล ได้ 255 ตัวอักษร L+1 bytes
TINYBLOB เป็น case-sensitive สำหรับการเรียงและเปรียบเทียบ สามารถเก็บข้อมูล ได้ 255 ตัวอักษร L+1 bytes
TEXT เป็น case-insensitive สำหรับเก็บข้อมูลประเภทตัวอักษร เช่นเดียวกับ TINYTEXT แต่สามารถเก็บได้มากขึ้น โดย สูงสุดคือ 65,535 ตัวอักษร เหมาะสำหรับเก็บข้อมูลพวกเนื้อหาต่างๆ ที่ยาวๆ L+2 bytes
BLOB เป็น case-sensitive สำหรับการเรียงและเปรียบเทียบ สามารถเก็บข้อมูล ได้สูงสุดคือ 65,535 ตัวอักษร L+2 bytes
MEDIUMTEXT เป็น case-insensitive เก็บข้อมูลประเภทตัวอักษร เช่นเดียวกับ TINYTEXT แต่เก็บข้อมูลได้ 16,777,215 ตัวอักษร L+3 bytes
MEDIUMBLOB เป็น case-sensitive เก็บข้อมูลประเภทตัวอักษร เช่นเดียวกับ TINYTEXT แต่เก็บข้อมูลได้ 16,777,215 ตัวอักษร L+3 bytes
LONGTEXT เป็น case-insensitive เก็บข้อมูลประเภทตัวอักษร เช่นเดียวกับ TINYTEXT แต่เก็บข้อมูลได้ 4,294,967,295 ตัวอักษร L+4 bytes
LONGBLOB เป็น case-sensitive เก็บข้อมูลประเภทตัวอักษร เช่นเดียวกับ TINYTEXT แต่เก็บข้อมูลได้ 4,294,967,295 ตัวอักษร L+4 bytes
ENUM(‘value1’,’value2’,…) เป็น การเก็บข้อมูลสตริงเข้าไว้เป็นรายการไว้ก่อน โดยค่าแรกถูกแทนด้วยค่า 1 หากรายการไม่ตรงกับรายการใดเลย จะแทนด้วยค่า 0 หรือจะใส่เป็นค่าตรงๆเลยก็ได้ ข้อมูลชนิดนี้จะช่วยลดพื้นที่การจัดเก็บได้อย่างมาก เหมาะกับการเลือกแบบลิสต์บ็อกซ์ เพราะเลือกได้เพียง 1 ตัวเลือกเท่านั้น ENUM เก็บค่ารายการได้สูงถึง 65535 ตัวเลือก 1 – 2 bytes
SET(‘value1’,’value2’,…) คล้าย กับ ENUM แต่เลือกรายการได้มากกว่าหนึ่งตัวเลือก จะใช้เลขฐานสองเก็บค่าตัวเลือก โดยรายการแรกมีค่า 1, 2, 4, 8, 16, 32,... ไปเรื่อยๆ ถ้าเลือกรายการไหนก็เอามาบวกกันจะได้ค่าที่จะเก็บบันทึก เหมาะกับการเลือกแบบเช็คบ็อกซ์ เพื่อให้ผู้ตอบเลือกได้มากกว่า 1 ตัวเลือก SET เก็บค่ารายการได้เพียง 64 ตัวเลือก 8 bytes
BOOL เหมือนกับ TINYINT แต่เก็บค่าเป็น 0 กับ 1 ซึ่ง 0 คือ เท็จ 1 คือ จริง  
BINARY(M) เหมือนกับชนิด CHAR แต่เก็บเป็นแบบ case-insensitive M bytes
VARBINARY(M) เหมือนกับชนิด VARCHAR แต่เก็บเป็นแบบ case-insensitive L+1 / L+2 bytes
L คือ ตัวอักษรที่ใช้จริง
  • case-sensitive คือ ตัวอักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็กมีความหมายแตกต่างกัน
  • case-insensitive คือ ไม่คำนึงถึงตัวอักษรตัวพิมพ์ใหญ่หรือพิมพ์เล็ก