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

Constraints (Week 3)

What constraints does your selected DBMS support?

     Constraints คือ ข้อบังคับหรือเงื่อนไขในการอนุญาติให้เก็บเฉพาะข้อมูลที่เหมาะสมลงในฐานข้อมูลเพื่อให้การเลือกข้อมูลจากฐานข้อมูลเป็นไปอย่างถูกต้อง

     - NOT NULL
     - UNIQUE
     - PRIMARY KEY
     - FOREIGN KEY
     - CHECK
     - DEFAULT

How to specify them?

      วิธีใช้งาน
CREATE TABLE table_name
(
column_name1 data_type(size) constraint_name,
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,
....
);

     - NOT NULL - บ่งบอกว่าใน column จะไม่สามารถเก็บค่า NULL ไว้
     - UNIQUE - กำหนดให้แต่ละ row ของ column จะเป็นค่าที่ไม่ซ้ำกัน
     - PRIMARY KEY - เป็นการกำหนดให้ column นั้นไม่เป็นค่า NULL และมีค่าที่ไม่ซ้ำกัน ช่วยในการการค้นหาและบันทึกข้อมูุลในตารางได้ง่ายและรวดเร็ว
     - FOREIGN KEY - เป็นการกำหนดค่าในตารางหนึ่งอ้างอิงไปยังค่าตารางอื่นมีความสัมพันธ์กัน
     - CHECK - เช็คค่าใน column ว่าเป็นไปตามที่กำหนดไว้
     - DEFAULT - ระบุค่าเริ่มต้นใน column

ทดลอง

NOT NULL , CHECK , DEFAULT
รูปภาพแสดงการสร้างตารางและรายละเอียด

     ทำการสร้างตารางใหม่ขึ้นมา โดยกำหนดให้ name และ lastname ไม่เป็น NULL และกำหนด check ให้ age ต้องมีค่ามากกว่า 16 และตั้งค่า default ให้ married ให้เป็น N

รูปภาพแสดงการใส่ข้อมูลลงตาราง

     สังเกตว่าถ้าเราไม่พิม name หรือ lastname จะทำให้ค่าเริ่มต้นเป็น default ซึ่งก็คือ NULL ทำให้ไม่สามารถใส่ข้อมูลได้

รูปภาพแสดงการใส่ข้อมูลแบบปกติ

     ทดลองใส่ค่าปกติลงไปในตาราง

รูปภาพแสดงการใส่ข้อมูลโดยไม่ใส่ married

     ทดลองไม่ใส่ค่า married ลงไป ทำให้ข้อมูลเป็นค่า Default ซึ่งจะกลายเป็น N ตรงช่อง married ตามที่เราได้กำหนดไว้ตอนแรก

ปัญหาที่พบ
รูปภาพแสดงการใส่ค่า age น้อยกว่า 16
     ทดลองใส่ค่า age น้อยกว่า 16 ตามที่ได้เขียน Check แต่ก็ยังสามารถเก็บข้อมูลได้ไม่เป็นไปตามที่คิดไว้


UNIQUE , PRIMARY KEY

รูปภาพแสดงการสร้างตาราง employee

     ทำการสร้าง Table ใหม่ขึ้นมา โดยกำหนดให้ Column employee_id เป็น primary key โดย primary key จะทำให้ Column นั้นเป็น Not NULL เสมอและ phone_number เป็น unique

รูปภาพแสดงการใส่ค่าซ้ำลงไป

     ทดสอบใส่ค่าที่ employee_id เดิมลงไปจะเห็นว่าไม่สามารถเพิ่มข้อมูลได้เพราะ Column employee_id เป็น primary key ต้องการค่าที่ไม่ซ้ำ ส่วนที่ Column phone_number ก็ไม่สามารถใส่ค่าซ้ำได้เช่นกันเพราะเป็น unique

รูปภาพแสดงการใส่ค่าโดยไม่ใส่ Phone_number

     ทดสอบใส่ค่า name สามารถซ้ำกันได้เพราะไม่ได้กำหนด Constraints ให้เป็น Primary key หรือ Unique ส่วน Column Phone_Number ที่กำหนด Constraints ให้เป็น Unique สามารถใส่ค่า NULL ลงไปได้


FOREIGN KEY


     ทำการสร้างตารางขึ้นมาใหม่ โดยสร้างตารางชื่อ product และ orders โดยตาราง orders จะมี foreign key ที่ตัว product_id และชี้ไปยัง id ในตาราง product เพื่อเป็นการอ้างอิงข้อมูล

รูปภาพแสดงรายละเอียดตารางทั้ง 2
รูปภาพแสดงข้อมูลทั้งที่ใส่ลงไปทั้งสองตาราง

     ทดลองใส่ข้อมูลลงไปทั้งสองตาราง

ทดลองใส่ค่าที่ไม่มีในตาราง product

     ถ้าเราใส่ค่า product_id ที่ไม่มีอยู่ในตาราง product ลงไปในตาราง orders จะไม่สามารถใส่ค่าลงไปได้ เนื่องจากเรามีการกำหนดให้มีความสัมพันธ์กันแบบ foreign key
 

อ้างอิง
http://code.function.in.th/sqlserver/data-type
http://www.w3schools.com/sql/sql_constraints.asp

ไม่มีความคิดเห็น:

แสดงความคิดเห็น