WORK14 การสร้าง index แบบ non unique และ unique PostgreSQL

 

การสร้าง index แบบ non unique และ unique PostgreSQL

วิธีบน pgAdmin 4


1) เมื่อเข้ามายังโปรแกรม pgAdmin 4 ให้ Double Click ที่ Server

2) ทำการ Double Click ที่ PostgreSQL 14

3) ทำการ Click ขวาที่ Databases

4) ทำการ Click ที่ Create

5) ทำการ Click ที่ Database...



6) เมื่อขึ้นหน้าต่าง Create-Database เหมือนในรูปภาพข้างบนให้ทำการตั้งชื่อฐานข้อมูลลงในช่อง Database
7) ทำการ Click ปุ่ม Save



6) ทำการ พิมพ์คำสั่ง SQL ในการสร้างตารางและมีการกำหนด primary key จากนั้นลากแถบดำคลุมคำสั่งนั้น
ตัวอย่างคำสั่งในภาพ create table category (
category_id varchar(2) primary key,
descr varchar
);

7) ทำการ Click ที่ปุ่ม Execute หรือกด F5 ตารางเราก็จะถูกสร้างเรียบร้อย



8) ทำการ Click ขวาที่ ฐานข้อมูลที่เราพึ่งสร้างไป

9) ทำการ Click ที่ Query Tool



10) ทำการ พิมพ์คำสั่ง SQL ในการสร้างตารางและมีการกำหนด primary key จากนั้นลากแถบดำคลุมคำสั่งนั้น
ตัวอย่างคำสั่งในภาพ create table menu(
id int primary key,
descr varchar,
descr_en varchar,
category varchar,
price int
);

11) ทำการ Click ที่ปุ่ม Execute หรือกด F5 ตารางเราก็จะถูกสร้างเรียบร้อย




12) ทำการ พิมพ์คำสั่ง SQL ในการเพิ่มข้อมูลลงในตารางแรกจากนั้นลากแถบดำคลุมคำสั่งนั้น Click ที่ปุ่ม Execute หรือกด F5 ข้อมูลเราก็จะถูกเพิ่มเรียบร้อย
ตัวอย่างคำสั่งในภาพ insert into category values
('cf', 'coffee'),
('te', 'tea'),
('ju', 'juice');

I

13) ทำการ พิมพ์คำสั่ง SQL ในการแสดงข้อมูลตารางแรกจากนั้นลากแถบดำคลุมคำสั่งนั้น Click ที่ปุ่ม Execute หรือกด F5
ตัวอย่างคำสั่งในภาพ select * from category;

14) ตารางก็จะโชว์ข้อมูลดังในรูปภาพ

ตัวอย่างกรณีศึกษาที่ 1

กรณีมีพนักงานใหม่เข้ามาและเราให้พนักงานทำการคีย์ข้อมูลเพิ่มลงไปในตารางซึ่งพนักงานดันใส่ข้อมูลที่มีชื่อและข้อมูลคล้ายกับข้อมูลที่มีอยู่แล้วแต่ต่างกันที่ ข้อมูล Primary Key แล้วทำการ Execute



จากที่แสดงในรูปจะเห็นได้ว่าพนักงานสามารถเพิ่มข้อมูลลงไปได้เพราะในฐานข้อมูลตอนนี้จะ Check แค่ว่า Primary Key มีข้อมูลหรือค่าที่ไม่ซ้ำใช่ไหมถ้าใช่ก็จะสามารถบันทึกข้อมูลได้แม้ข้อมูล Columns อื่นๆจะซ้ำก็ตาม

วิธีป้องกันและการทำ index

เมื่อเห็นดังข้างต้นแล้วเราจึงควรสร้าง index แบบ unique ขึ้นมาเพื่อให้พนักงานไม่สามารถกรอกข้อมูลที่มีอยู่แล้วในฐานข้อมูลซ้ำได้



จากนั้นจึงทำการพิมพ์คำสั่ง SQL เพื่อสร้าง index แบบ unique คือ create unique index ชื่อindexตั้งตามใจเรา on ชื่อตาราง (ชื่อ Columns ) และลากแถบดำคลุมคำสั่งนั้นทำการกดปุ่ม Execute หรือกด F5 แต่จะเห็นได้ว่าเกิด ERROR เนื่องจากในตอนนี้ Columns ที่เราจะสร้าง index มีข้อมูล มอคค่า ที่พนักงานเคยใส่ข้อมูลซ้ำลงไปแล้ว 2 ข้อมูลจึงจำเป็นต้องทำการลบข้อมูลออกให้เหลือเพียงแค่ 1 ข้อมูลเพื่อไม่ให้ข้อมูลซ้ำตามกฏของ index นั้นเอง





ทำการพิมพ์คำสั่ง SQL ลบข้อมูลที่ซ้ำกันออกและหลังจากนั้นทำการ Exeute คำสั่งสร้าง index ใหม่อีกครั้งจะเห็นได้ว่าสามารถสร้าง index ได้แล้วเพราะไม่มีข้อมูลของ Columns ที่เราจะสร้างซ้ำกันอีก



เมื่อเราใช้คำสั่ง SQL ในการเรียกข้อมูลในตาราง menu ขณะนี้มาดูก็จะพบกับข้อมูลในปัจจุบันและเมื่อพนักงานลองคีย์ข้อมูลที่ซ้ำกับค่า index อีกครั้ง



จะเห็นได้ว่าเกิด ERROR ขึ้นเพราะ Columns descr หรือที่เราได้ทำ index unique ไว้มีข้อมูลนั้นอยู่แล้วจึงไม่สามารถเพิ่มเข้าไปอีกดี และนี้คือประโยชน์ของ index ทำให้เราไม่ต้องกรอกข้อมูลที่เราไม่ต้องการให้มันซ้ำได้นั้นเอง

ตัวอย่างกรณีศึกษาที่ 2

กรณี category ของเรานอกจากจะมี coffee แล้วยังมี tea soda แล้วเราต้องการค้นหาหรือดูข้อมูลที่เป็นแค่เฉพาะ soda หรือ tea แบบนี้ให้เร็วชึ้นเราก็สามารถสร้าง index ให้กับ Columns นี้ได้



จากนั้นจึงทำการพิมพ์คำสั่ง SQL เพื่อสร้าง index แบบ non unique คือ create index ชื่อindexตั้งตามใจเรา on ชื่อตาราง (ชื่อ Columns ) และลากแถบดำคลุมคำสั่งนั้นทำการกดปุ่ม Execute หรือกด F5 ซึ่งเป็นการให้ใส่ข้อมูลที่ซ้ำได้เพราะน้ำหลายรายการสามารถเป็น coffee หรือ soda ซ้ำกันได้


จากนั้นจึงทำการพิมพ์คำสั่ง SQL เพิ่มข้อมูลลงในตาราง menu อีกครั้ง ซึงครั้งนี้ข้อมูล Columns category ที่เราได้ตั้งเป็น index แบบ non unique ไว้มีการซ้ำกันของข้อมูลและลากแถบดำคลุมคำสั่งนั้นทำการกดปุ่ม Execute หรือกด F5 จากนั้นจะเห็นได้ว่าสารมารถเพิ่มข้อมูลลงในตารางได้แม้ข้อมูลจะซ้ำกันเพราะ index แบบ non unique ข้อมูลจะสามารถซ้ำกันได้ ต่างจาก index แบบ unique ที่ข้อมูลจะไม่สามารถซ้ำกันได้นั้นเอง



เมื่อทำการพิมพ์คำสั่ง SQL เพื่อดูข้อมูลในตารางก็จะเห็นว่าข้อมูลนั้นได้ถึงบันทึกลงครบถ้วนเรียบร้อย
ปล. หากต้องการลบ index สามารถพิมพ์คำสั่ง SQL ได้ดังนี้ drop index ชื่อindex; แล้วทำการ Execute

ความคิดเห็น