ประเภทของคีย์ในฐานข้อมูล Primary Key - Compound Key - Foreign Key คืออะไร

SQL Knowledge ทั้ง sql มาตรฐาน หลักการออกแบบฐานข้อมูล ความสัมพันธ์ของ ตาราง Mysql , PGSQL, Oracle, MSSQL

Moderator: mindphp, ผู้ดูแลกระดาน

M013
PHP Super Hero Member
PHP Super Hero Member
โพสต์: 829
ลงทะเบียนเมื่อ: 22/04/2010 12:02 pm

ประเภทของคีย์ในฐานข้อมูล Primary Key - Compound Key - Foreign Key คืออะไร

โพสต์ที่ยังไม่ได้อ่าน โดย M013 »

ประเภทของคีย์ใน ระบบฐานข้อมูล

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

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


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

3.Compound Key (คีย์รวม)
ในบางครั้งเรียกคีย์ชนิดนี้ว่า Composite Key เป็นคีย์ที่ใช้คอลัมน์หลายคอลัมน์มาร่วมกันเป็นคีย์หลัก ดังรูปที่ 1.3
รูปที่ 1.3 Compound Key (คีย์รวม)
รูปที่ 1.3 Compound Key (คีย์รวม)
Compound Key.jpg (60.84 KiB) Viewed 47981 times
#เนื่องจากในบางครั้งการกำหนด Primary Key เพียงคอลัมน์เดียวอาจเกิดการซ้ำของข้อมูลได้

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

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

5.Foreign Key (คีย์นอก)
เป็นคีย์ที่ใช้เชื่อมความสัมพันธ์กับตารางอื่นๆ
รูปที่ 1.6 Foreign Key (คีย์นอก)
รูปที่ 1.6 Foreign Key (คีย์นอก)
Foreign Key.jpg (145.6 KiB) Viewed 47981 times
จากรูปที่ 1.6 ตารางนักศึกษามีคอลัมน์รหัสประจำตัวนักศึกษาเป็น Primary Key และในตารางการลงทะเบียนมีคอลัมน์รัหัสวิชาเป็น Primary Key เเต่เมื่อ 2 ตารางมีความสัมพันธ์กัน คอลัมน์รหัสประจำตัวนักศึกษาจะเป็น Foreign Key ของตารางการลงทะเบียน ซึ่งความสัมพันธ์แบบ One-to-Many (ศึกษาความสัมพันธ์ของระบบฐานข้อมูลเพิ่มเติม viewtopic.php?p=38352#p38352)
ภาพประจำตัวสมาชิก
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
โพสต์: 41123
ลงทะเบียนเมื่อ: 22/09/2008 6:18 pm
ติดต่อ:

Re: ประเภทของคีย์ในฐานข้อมูล Primary Key - Compound Key - Foreign Key คืออะไร

โพสต์ที่ยังไม่ได้อ่าน โดย mindphp »

สอนเขียนคำสั่งฐานข้อมูล การ SELECT database (MySQL) รูปแบบ การ Query
viewtopic.php?f=74&t=18516
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
ตอบกลับโพส
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 38