อะไรคือความแตกต่างระหว่างคีย์หลักและซุปเปอร์คีย์ใน DBMS


20

ฉันใหม่สำหรับ DBMS และฉันยังคงเรียนรู้ทฤษฎี

ฉันสับสนกับธุรกิจหลักนี้และหลังจาก googling ฉันได้ จำกัด ให้เหลือเพียง 2 ปุ่มเท่านั้นฉันไม่ได้รับ (หลักและกุญแจหลัก)

ฉันมีคำถามสองสามข้อเกี่ยวกับ DBMS ฉันจะขอบคุณถ้าคุณสามารถตอบพวกเขาสำหรับฉัน

1) อะไรคือความแตกต่างระหว่างคีย์หลักและซุปเปอร์คีย์ใน DBMS? ขอขอบคุณอย่างสูงหากคุณสามารถใช้ตัวอย่างที่ครอบคลุมเพื่ออธิบายอย่างถูกต้อง

2) คีย์หลักและ Super key ทั้งสองสามารถรวมกันหลายคอลัมน์เพื่อสร้างคีย์หลักและซุปเปอร์คีย์ได้หรือไม่

3) คีย์หลักเป็นชุดย่อยของ Super key หรือในทางกลับกัน


1
สิ่งหนึ่งที่คัดสรรมาแล้วมากมายคือ tuple (แถว) นั้นเป็น superkey เนื่องจากความตั้งใจที่จะสามารถระบุแถวที่ไม่ซ้ำกันคือเพื่อให้สามารถระบุ tuple ที่มีการรวมกันของค่าโดยเฉพาะวิธีหนึ่งในการทำเช่นนั้นคือการมีค่าทั้งหมดที่มีอยู่แล้ว ดังนั้น tuple จึงเป็นซุปเปอร์คีย์สำหรับตัวเองเนื่องจากเมื่อเรารู้ค่าใน tuple แล้วชัดเจนว่าเรารู้วิธีหา tuple ที่มีค่าเหล่านั้น ดูเหมือนว่าโง่ในตอนแรก แต่มันสร้างขอบเขตบนสิ่งที่สามารถเป็น superkey สำหรับ tuple - tuple ตัวเอง
เดฟ

@Dave ชุดของชื่อคอลัมน์ทั้งหมดของความสัมพันธ์ / ตาราง (และด้วยเหตุนี้แต่ละ tuples / แถว) จึงเป็น superkey ของมัน ไม่ใช่ "tuple (แถว) ของตัวเอง"
philipxy

@phipipxy คุณถูกต้องและฉัน misspoke - ฉันยืนแก้ไขแล้ว ขอบคุณที่เพิ่มคำอธิบาย
เดฟ

คำตอบ:


23

ซูเปอร์สำคัญก็คือไม่ใช่น้อยที่สุดผู้สมัครที่สำคัญนั่นคือจะบอกว่าเป็นหนึ่งเดียวกับคอลัมน์เพิ่มเติมไม่จำเป็นต้องใช้อย่างเคร่งครัดเพื่อให้แน่ใจว่าเป็นเอกลักษณ์ของแถว

คีย์หลักเป็นน้อยที่สุดที่สำคัญผู้สมัครซึ่งก็คือการพูดคอลัมน์รัฐธรรมนูญทุกคนจะต้องเคร่งครัดในการสั่งซื้อเพื่อให้แน่ใจว่าเป็นเอกลักษณ์

ในฐานะนักพัฒนาฐานข้อมูล / นักออกแบบที่มีประสบการณ์ 30 ปีฉันไม่เคยแม้แต่จะได้ยินคำว่าSuper Keyจนกระทั่งฉันเห็นคำถามนี้และค้นหามัน แนวคิดของ Super Key นั้นมีความสอดคล้องกับหัวข้อของประสิทธิภาพและการออกแบบ Physical Schema มากขึ้นเนื่องจากจะจับคู่กับแนวคิดของดัชนีที่ไม่เป็นคลัสเตอร์ที่ไม่ซ้ำกันโดยตรงพร้อมคอลัมน์เพิ่มเติมสำหรับการปรับปรุงแบบสอบถามที่ครอบคลุม


3
มันค่อนข้างไม่ถูกต้อง คุณกำลังใช้ superkey, CK & PK แทน superkey ที่เหมาะสม, superkey และ CK ซุปเปอร์คีย์เป็นชุดที่ไม่ซ้ำกัน (CK คือ superkey "น้อยที่สุด" ไม่มีความคิดของ "minimal CK" ทุก CK เป็น superkey ดังนั้น superkey จึงไม่จำเป็นต้องมีคอลัมน์มากกว่า CK CK คือ CK ที่เรียก PK หากต้องเป็น "ขั้นต่ำ CK" ดังนั้น "ขั้นต่ำ" จะต้องหมายถึง "ตามอำเภอใจ") SQL PK & UNIQUE NOT NULL จะประกาศ superkey (SQL PK อาจจะใช่หรือไม่ใช่ PK ก็ได้) Superkey มีความสำคัญต่อคำจำกัดความของ CK ซึ่งมีความสำคัญต่อการออกแบบรวมถึงการทำให้เป็นมาตรฐาน ดูคำตอบของฉัน
philipxy

1
นอกจากนี้จำเป็นต้องมีความเข้าใจ SK เพื่อใช้Boyce-Codd NF
Tanckom

16

Super Keys: Super key ย่อมาจาก superset of the key Super Key เป็นชุดของคุณลักษณะอย่างน้อยหนึ่งรายการที่นำมารวมกันและสามารถระบุคุณลักษณะอื่น ๆ ทั้งหมดโดยไม่ซ้ำกัน

ตัวอย่างเช่นเรากำลังมีตาราง

Book (BookId, BookName, Author)

ดังนั้นในตารางนี้เราสามารถมี

   (BookId)
   (BookId,BookName)
   (BookId, BookName, Author)
   (BookId, Author)
   (BookName, Author)

ในฐานะที่เป็นกุญแจสำคัญของเรา แต่ละปุ่มซุปเปอร์สามารถระบุแต่ละ tuple (บันทึก) โดยไม่ซ้ำกัน

Candidate Keys Candidate Keys เป็นซุปเปอร์คีย์ที่ไม่มีคุณสมบัติซ้ำซ้อน กล่าวอีกนัยหนึ่งคือปุ่มตัวเลือกคือซุปเปอร์ซุปเปอร์คีย์ ตัวอย่างเช่นในภาพประกอบด้านบน

   (BookId)
   (BookName,Author)

ปุ่มสองปุ่มเหล่านี้สามารถเป็นปุ่มตัวเลือกได้เนื่องจากปุ่มที่เหลืออยู่จะมีแอตทริบิวต์ที่ซ้ำซ้อน หมายถึงใน super key (BookId, BookName) สามารถระบุได้อย่างไม่ซ้ำใครโดย bookid และดังนั้น Bookname จึงเป็นคุณลักษณะที่ซ้ำซ้อน

คีย์หลัก: เป็นคีย์ตัวเลือกที่ถูกเลือกโดยผู้ออกแบบฐานข้อมูลเพื่อระบุเอนทิตีด้วยในชุดเอนทิตี หรือคีย์ที่ใช้เพื่อระบุแต่ละเร็กคอร์ดที่ไม่ซ้ำกันเรียกว่าคีย์หลัก

ผู้สมัครสามารถเป็นคีย์หลักได้จากด้านบน และอีกอันที่ไม่ได้เลือกเป็นคีย์หลักจะรู้ว่าเป็นคีย์สำรอง


นี้ตอบคำถามและสมควร upvote
srk

โปรดทราบว่าชื่ออื่นสำหรับชื่อalternative keyนั้นsecondary keyเหมือนกัน คำตอบที่ดี!
Wael Alshabani

2

จากคำตอบของ stackoverflow.com ของฉัน :

คีย์ตัวเลือกคือชุดของคอลัมน์ที่ระบุแถวที่ไม่ซ้ำกันและมีชุดย่อยของคอลัมน์ที่ไม่เล็กกว่า ("เหมาะสม") ที่ระบุแถวโดยไม่ซ้ำกัน

Superkey คือชุดของคอลัมน์ที่ระบุแถวโดยไม่ซ้ำกัน ดังนั้นคีย์ตัวเลือกคือซุปเปอร์คีย์ที่ไม่มีซูเปอร์คีย์ที่เล็กกว่า

ใน SQL คุณไม่สามารถประกาศรหัสผู้สมัครที่ว่างเปล่าได้ นอกจากนี้ UNIQUE NOT NULL และ KEY หลัก (ซึ่งในแง่ของข้อ จำกัด หมายถึง UNIQUE NOT NULL) ประกาศ Superkeys ไม่ใช่คีย์ต่อ SE หากชุดคอลัมน์ของการประกาศดังกล่าวไม่มีชุดของคอลัมน์ที่เล็กกว่าซึ่งประกาศเป็นซุปเปอร์คีย์ดังนั้นซุปเปอร์คีย์ที่ประกาศนั้นคือคีย์ที่ใช้

จากคำตอบ stackoverflow.com นี้ของฉันอีกตารางที่กำหนด:

สำหรับชุดของคอลัมน์ X และ Y เราสามารถเขียนX -> Y เราบอกว่า X เป็นชุดดีเทอร์มิแนนต์และ Y คือเซตที่กำหนดของ / ในฟังก์ชันการพึ่งพา ( FD ) X -> Y

เราบอกว่า X เป็นตัวกำหนดหน้าที่ Y และ Y ถูกกำหนดโดย X ตามหน้าที่เราบอกว่า X คือดีเทอร์มีแนนต์ของ X -> Y ใน {C} -> Y เราบอกว่า C เป็นหน้าที่กำหนด Y ใน X -> {C} เราพูดว่า X กำหนดหน้าที่ C. เมื่อ X เป็นชุดซูเปอร์เซ็ตของ Y เราพูดว่า X -> Y เป็นเรื่องไม่สำคัญ

เราบอกว่า X -> Y ถือในตาราง T เมื่อแต่ละ subrow ของค่าสำหรับ X เสมอ / เท่านั้นปรากฏขึ้นพร้อมกับ subrow ของค่าเดียวกันสำหรับ Yหรือเราบอกว่า X -> Y เป็น FD ของ / ใน T เมื่อ X เป็นปัจจัย ของ FD บางตัวในตาราง T เราบอกว่า X เป็นปัจจัยกำหนด / ใน T

superkeyของ T ตารางคือชุดของคอลัมน์ที่กำหนดหน้าที่ทุกแอตทริบิวต์ ที่สำคัญผู้สมัคร ( CK ) เป็น superkey ที่มี superkey ไม่มีขนาดเล็ก เราสามารถเลือกหนึ่ง CK เป็นคีย์หลัก ( PK ) และจากนั้นเรียก CKs อื่น ๆกุญแจสำรอง คอลัมน์มีความสำคัญเมื่ออยู่ใน CK บางตัว

(ตามที่ฉันแสดงความคิดเห็นที่นั่น "ประโยคสี่ตัวหนาสำหรับ FD, ถือ, superkey และ CK จะพอเพียง")

(ตารางที่มี CK ว่างจะถูก จำกัด ให้มีได้ไม่เกินหนึ่งแถวชุดคอลัมน์ที่กำหนดโดยชุดว่างจะถูก จำกัด ให้มีค่า subrow เหมือนกันในทุกแถว)


1

คีย์คีย์คือการรวมกันของหลาย ๆ ฟิลด์ โดยมีวัตถุประสงค์คือเพื่อเข้าถึงหรือดึงแถวข้อมูลจากตารางตามข้อกำหนด ปุ่มถูกกำหนดในตารางเพื่อเข้าถึงหรือจัดลำดับข้อมูลที่เก็บไว้อย่างรวดเร็วและราบรื่น พวกเขายังใช้ในการสร้างลิงค์ระหว่างตารางที่แตกต่างกัน

ประเภทของคีย์ตารางหรือความสัมพันธ์ต่อไปนี้จะถูกใช้เพื่อกำหนดประเภทของคีย์ที่แตกต่างกัน

คีย์หลักแอตทริบิวต์หรือการรวมกันของแอตทริบิวต์ที่ระบุแถวหรือระเบียนในความสัมพันธ์โดยเฉพาะเรียกว่าคีย์หลัก

คีย์รองเขตข้อมูลหรือการรวมกันของเขตข้อมูลที่เป็นพื้นฐานสำหรับการดึงข้อมูลเป็นที่รู้จักกันเป็นคีย์รอง คีย์รองเป็นฟิลด์ที่ไม่ซ้ำกัน ค่าคีย์รองหนึ่งรายการอาจอ้างถึงหลาย ๆ ระเบียน

คีย์ผู้สมัครหรือคีย์ทางเลือกความสัมพันธ์สามารถมีคีย์หลักได้เพียงคีย์เดียวเท่านั้น มันอาจมีหลายเขตข้อมูลหรือการรวมกันของเขตข้อมูลที่สามารถใช้เป็นคีย์หลัก เขตข้อมูลหนึ่งหรือรวมกันของเขตข้อมูลที่ใช้เป็นคีย์หลัก เขตข้อมูลหรือการรวมกันของเขตข้อมูลที่ไม่ได้ใช้เป็นคีย์หลักจะเรียกว่าคีย์ตัวเลือกหรือคีย์ทางเลือก

คีย์ผสมหรือคีย์ที่ต่อกันคีย์หลักที่ประกอบด้วยแอตทริบิวต์สองตัวขึ้นไปนั้นรู้จักกันในชื่อคีย์ผสม

เรียงลำดับหรือควบคุมปุ่มเขตหรือการรวมกันของเขตข้อมูลที่ใช้ในการจัดลำดับข้อมูลที่เก็บไว้ที่เรียกว่าคีย์การจัดเรียง มันเป็นที่รู้จักกันว่าปุ่มควบคุม

superkeyคือการรวมกันของคุณลักษณะที่สามารถใช้ซ้ำกันเพื่อระบุระเบียนฐานข้อมูล ตารางอาจมีซุปเปอร์คีย์มากมาย คีย์ผู้สมัครเป็นส่วนย่อยพิเศษของซุปเปอร์คีย์ที่ไม่มีข้อมูลภายนอกใด ๆ

ตัวอย่างสำหรับซุปเปอร์คีย์:ลองนึกภาพตารางที่มีฟิลด์ชื่อ, อายุ, SSN และ <ส่วนขยายโทรศัพท์> ตารางนี้มีซุปเปอร์คีย์ที่เป็นไปได้มากมาย สามสิ่งเหล่านี้คือ SSN ส่วนขยายโทรศัพท์และชื่อ ในบรรดาที่ระบุไว้มีเพียง SSN เท่านั้นที่เป็นคีย์ตัวเลือกเนื่องจากตัวอื่น ๆ มีข้อมูลที่ไม่จำเป็นในการระบุระเบียนโดยไม่ซ้ำกัน

Foreign Key Foreign key เป็นคุณลักษณะหรือการรวมกันของแอตทริบิวต์ในความสัมพันธ์ที่มีค่าตรงกับคีย์หลักในความสัมพันธ์อื่น ตารางที่สร้าง foreign key เรียกว่าตารางที่ต้องพึ่งพา ตารางซึ่งเป็นหมายเลขต่างประเทศที่อ้างถึงเรียกว่าตารางหลัก

สำหรับปุ่ม Minimal Superดูลิงค์นี้มันชัดเจนยิ่งขึ้นที่นั่นhttp://www.answers.com/topic/superkey-1

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.