ประเภทของคีย์ใน ระบบฐานข้อมูล
การกำหนดคีย์ในระบบฐานข้อมูลนั้น ไม่ว่า ฐานข้อมูลใดๆเช่น
PostgreSQL,
MySQL,
Oracle,
SQL Server ก็มี Key ไว้สำหรับเป็นการช่วยเพิ่มประสิทธิภาพในการทำงานของฐานข้อมูล เพราะเป็นการกำหนดการอ้างอิงของข้อมูล การค้นหา จึงทำให้การประมวลของระบบมีความรวดเร็วยิ่ง ซึ่งคีย์ในระบบฐานข้อมูลสามารถแบ่งออกได้ 5 ชนิดดังนี้
1.Primary Key (คีย์หลัก) คือะไร
คีย์หลัก คือข้อมูลคอลัมน์หนึ่งในตารางที่
ไม่มีค่าซ้ำกับข้อมูลคอลัมน์อื่น เเละต้อง
ไม่เป็นค่าว่าง(Null)

- รูปที่ 1.1 Primary Key (คีย์หลัก)
- Primary Key.jpg (69.86 KiB) Viewed 34646 times
จากรูปที่ 1.1 จะเห็นว่าคอลัมน์ที่เป็น
Primary Key คือ รหัสประจำตัวนักศึกษา เพราะ
ไม่มีค่าซ้ำกับคอลัมน์อื่น เเละ
ไม่เป็นค่าว่าง
#อาจมีข้อสงสัยว่าทำไมเราไม่ใช้ ชื่อ หรือ นามสกุล ในการกำหนด Primary Key เพราะชื่อและนามสกุลของคนเราอาจมีเหมือนกันได้
ดังนั้นหากนักศึกษามีชื่อซ้ำขึ้นมาก็จะไม่สามารถระบุการอ้างอิงได้
2.Secondary Key (คีย์รอง)
ในบางครั้งเรียกคีย์ชนิดนี้ว่า อินเด็กซ์ (Index) คีย์ชนิดนี้เปรียบเสมือนเป็นคีย์รองจากคีย์หลัก กล่าวคือเมื่อเรากำหนดคีย์หลักเเล้ว DBMS ก็จะสามารถค้นหาข้อมูล เเต่เมื่อรัยที่มีข้อมูลเป็นจำนวนมาก DBMS ก็จะต้องทำการค้นหาตั้งเเต่ต้นจนกว่าจะเจอ ซึ่งทำให้เกิดการล่าช้า
เเต่หากมีคีย์รองเป็นชื่อและนามสกุลก็จะสามารถช่วยให้ DBMS ทำการค้นหาได้สะดวกรวดเเล้วยิ่งขึ้น

- รูปที่ 1.2 Secondary Key (คีย์รอง)
- Secondary Key.jpg (82.27 KiB) Viewed 34646 times
#คีย์รองยอมให้ข้อมูลซ้ำกันได้ เเต่หากข้อมูลซ้ำกันมากก็ไม่เป็นผลดี
3.Compound Key (คีย์รวม)
ในบางครั้งเรียกคีย์ชนิดนี้ว่า Composite Key เป็นคีย์ที่ใช้คอลัมน์หลายคอลัมน์มาร่วมกันเป็นคีย์หลัก ดังรูปที่ 1.3

- รูปที่ 1.3 Compound Key (คีย์รวม)
- Compound Key.jpg (60.84 KiB) Viewed 34646 times
#เนื่องจากในบางครั้งการกำหนด Primary Key เพียงคอลัมน์เดียวอาจเกิดการซ้ำของข้อมูลได้
4.Candidate Key (คีย์คู่เเข่ง)
เมื่อมีคอลัมน์ที่มีคุณสมบัติครบถ้วนในการเป็น Primary Key คือ ไม่มีค่าซ้ำ ไม่เป็นค่าว่าง

- รูปที่ 1.4 Candidate Key (คีย์คู่เเข่ง)
- Candidate Key.jpg (75.91 KiB) Viewed 34646 times
จากรูปที่ 1.4 จะเห็นว่ามี Candidate Key อยู่ 2 ตัวคือ รหัสประจำตัวนักศึกษาและชื่อ(ถ้ามั่นใจเเล้วว่าชื่อนักศึกษาจะไม่มีค่าซ้ำกันเลย)
#ในกรณีนี้หากผู้ออกแบบฐานข้อมูลกำหนดให้คอลัมน์รหัสประจำตัวนักศึกษาเป็น Primary Key ดังนั้นคอลัมน์ชื่อก็จะกลายเป็น Secondary Key อัตโนมัติ
เพื่อให้เข้าใจยิ่งขึ้นให้ดูอีกตัวอย่างหนึ่งดังรูปที่ 1.5

- รูปที่ 1.5 Candidate Key (คีย์คู่เเข่ง)
- Candidate Key_1.jpg (91.71 KiB) Viewed 34646 times
จากรูปที่ 1.5 จะเห็นได้อย่างชัดเจนว่า รหัสประจำตัวนักศึกษาเเละรหัสบัตรประชาชน จะไม่เป็นค่าซ้ำและค่าว่างอย่างเเน่นอน ดังนั้นรหัสประจำตัวนักศึกษาเเละรหัสบัตรประชาชน คือ Candidate Key
5.Foreign Key (คีย์นอก)
เป็นคีย์ที่ใช้เชื่อมความสัมพันธ์กับตารางอื่นๆ

- รูปที่ 1.6 Foreign Key (คีย์นอก)
- Foreign Key.jpg (145.6 KiB) Viewed 34646 times
จากรูปที่ 1.6 ตารางนักศึกษามีคอลัมน์รหัสประจำตัวนักศึกษาเป็น Primary Key และในตารางการลงทะเบียนมีคอลัมน์รัหัสวิชาเป็น Primary Key เเต่เมื่อ 2 ตารางมีความสัมพันธ์กัน คอลัมน์รหัสประจำตัวนักศึกษาจะเป็น Foreign Key ของตารางการลงทะเบียน ซึ่งความสัมพันธ์แบบ One-to-Many (ศึกษาความสัมพันธ์ของระบบฐานข้อมูลเพิ่มเติม
viewtopic.php?p=38352#p38352)
[size=150][b]ประเภทของคีย์ใน [url=https://www.mindphp.com/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD/73-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3/2055-database-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A323.html]ระบบฐานข้อมูล[/url][/b][/size]
การกำหนดคีย์ในระบบฐานข้อมูลนั้น ไม่ว่า ฐานข้อมูลใดๆเช่น [url=https://www.mindphp.com/developer/21-sql-pgsql.html]PostgreSQL[/url], [url=https://www.mindphp.com/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD/73-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3/3330-intro-mysql-databases.html]MySQL[/url], [url=https://www.mindphp.com/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD/73-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3/2283-oracle-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A320.html]Oracle[/url], [url=https://www.mindphp.com/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD/73-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3/2266-sql-server-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3.html]SQL Server[/url] ก็มี Key ไว้สำหรับเป็นการช่วยเพิ่มประสิทธิภาพในการทำงานของฐานข้อมูล เพราะเป็นการกำหนดการอ้างอิงของข้อมูล การค้นหา จึงทำให้การประมวลของระบบมีความรวดเร็วยิ่ง ซึ่งคีย์ในระบบฐานข้อมูลสามารถแบ่งออกได้ 5 ชนิดดังนี้
[b]1.Primary Key (คีย์หลัก) คือะไร [/b]
คีย์หลัก คือข้อมูลคอลัมน์หนึ่งในตารางที่[u][b]ไม่มีค่าซ้ำ[/b][/u]กับข้อมูลคอลัมน์อื่น เเละต้อง[u][b]ไม่เป็นค่าว่าง(Null)[/b][/u]
[attachment=5]Primary Key.jpg[/attachment]จากรูปที่ 1.1 จะเห็นว่าคอลัมน์ที่เป็น [b]Primary Key[/b] คือ รหัสประจำตัวนักศึกษา เพราะ[b]ไม่มีค่าซ้ำ[/b]กับคอลัมน์อื่น เเละ[b]ไม่เป็นค่าว่าง[/b]
[i]#อาจมีข้อสงสัยว่าทำไมเราไม่ใช้ ชื่อ หรือ นามสกุล ในการกำหนด Primary Key เพราะชื่อและนามสกุลของคนเราอาจมีเหมือนกันได้
ดังนั้นหากนักศึกษามีชื่อซ้ำขึ้นมาก็จะไม่สามารถระบุการอ้างอิงได้[/i]
[b]2.Secondary Key (คีย์รอง)[/b]
ในบางครั้งเรียกคีย์ชนิดนี้ว่า อินเด็กซ์ (Index) คีย์ชนิดนี้เปรียบเสมือนเป็นคีย์รองจากคีย์หลัก กล่าวคือเมื่อเรากำหนดคีย์หลักเเล้ว DBMS ก็จะสามารถค้นหาข้อมูล เเต่เมื่อรัยที่มีข้อมูลเป็นจำนวนมาก DBMS ก็จะต้องทำการค้นหาตั้งเเต่ต้นจนกว่าจะเจอ ซึ่งทำให้เกิดการล่าช้า
เเต่หากมีคีย์รองเป็นชื่อและนามสกุลก็จะสามารถช่วยให้ DBMS ทำการค้นหาได้สะดวกรวดเเล้วยิ่งขึ้น[attachment=4]Secondary Key.jpg[/attachment][i]#คีย์รองยอมให้ข้อมูล[u]ซ้ำกันได้[/u][/i] เเต่หากข้อมูลซ้ำกันมากก็ไม่เป็นผลดี
[b]3.Compound Key (คีย์รวม)[/b]
ในบางครั้งเรียกคีย์ชนิดนี้ว่า Composite Key เป็นคีย์ที่ใช้คอลัมน์หลายคอลัมน์มาร่วมกันเป็นคีย์หลัก ดังรูปที่ 1.3[attachment=3]Compound Key.jpg[/attachment]#เนื่องจากในบางครั้งการกำหนด Primary Key เพียงคอลัมน์เดียวอาจเกิดการซ้ำของข้อมูลได้
[b]4.Candidate Key (คีย์คู่เเข่ง)[/b]
เมื่อมีคอลัมน์ที่มีคุณสมบัติครบถ้วนในการเป็น Primary Key คือ ไม่มีค่าซ้ำ ไม่เป็นค่าว่าง[attachment=2]Candidate Key.jpg[/attachment]จากรูปที่ 1.4 จะเห็นว่ามี Candidate Key อยู่ 2 ตัวคือ รหัสประจำตัวนักศึกษาและชื่อ(ถ้ามั่นใจเเล้วว่าชื่อนักศึกษาจะไม่มีค่าซ้ำกันเลย)
#ในกรณีนี้หากผู้ออกแบบฐานข้อมูลกำหนดให้คอลัมน์รหัสประจำตัวนักศึกษาเป็น Primary Key ดังนั้นคอลัมน์ชื่อก็จะกลายเป็น Secondary Key อัตโนมัติ
เพื่อให้เข้าใจยิ่งขึ้นให้ดูอีกตัวอย่างหนึ่งดังรูปที่ 1.5
[attachment=1]Candidate Key_1.jpg[/attachment]จากรูปที่ 1.5 จะเห็นได้อย่างชัดเจนว่า รหัสประจำตัวนักศึกษาเเละรหัสบัตรประชาชน จะไม่เป็นค่าซ้ำและค่าว่างอย่างเเน่นอน ดังนั้นรหัสประจำตัวนักศึกษาเเละรหัสบัตรประชาชน คือ Candidate Key
[b]5.Foreign Key (คีย์นอก)[/b]
เป็นคีย์ที่ใช้เชื่อมความสัมพันธ์กับตารางอื่นๆ
[attachment=0]Foreign Key.jpg[/attachment]จากรูปที่ 1.6 ตารางนักศึกษามีคอลัมน์รหัสประจำตัวนักศึกษาเป็น Primary Key และในตารางการลงทะเบียนมีคอลัมน์รัหัสวิชาเป็น Primary Key เเต่เมื่อ 2 ตารางมีความสัมพันธ์กัน คอลัมน์รหัสประจำตัวนักศึกษาจะเป็น Foreign Key ของตารางการลงทะเบียน ซึ่งความสัมพันธ์แบบ One-to-Many (ศึกษาความสัมพันธ์ของระบบฐานข้อมูลเพิ่มเติม https://www.mindphp.com/forums/viewtopic.php?p=38352#p38352)