ใน SQL เป็นคอมโพสิตหรือคีย์ผสมหรือไม่


31

เกี่ยวกับ SQL (คอมพิวเตอร์ / ฐานข้อมูล):

เมื่อเรามีสองฟิลด์ขึ้นไปในตารางที่ระบุระเบียนโดยไม่ซ้ำกันวิธีที่เหมาะสมในการโทรหาพวกเขาคืออะไร? แป้นผสมหรือแป้นผสม?

ฉันเคยเห็นในเว็บทั้งสองใช้ดังนั้นฉันไม่แน่ใจจริงๆ


1
ตรวจสอบเหล่านี้สองแนวโน้มการค้นหาของ Google: goo.gl/5u4XdR
igordcard

คำตอบ:


32

ทั้งคีย์ผสมและคีย์ผสมอธิบายคีย์ตัวเลือกที่มีมากกว่าหนึ่งแอตทริบิวต์ ตามพจนานุกรมฐานข้อมูลเชิงสัมพันธ์ (CJDate) พวกเขาหมายถึงสิ่งเดียวกัน

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


3
"ในการสร้างแบบจำลอง ER คำว่า" คีย์ผสม "ยังมีความหมายที่เฉพาะเจาะจงมากขึ้น" - ฟังดูน่าเชื่อ :) แต่คุณมีการอ้างอิงไหม?
oneday เมื่อ

ดังนั้นคีย์ผสมจะเป็นกุญแจที่มักจะพบในตารางแยกที่ใช้สำหรับความสัมพันธ์หลายอย่างเช่น?
Josh P

19

ฉันยังไม่แน่ใจว่าทำไมถึงไม่http://en.wikipedia.org/wiki/Compound_key มันชัดเจนมากรัฐ (และถูกต้อง):

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

มักจะสับสนกับคีย์ผสมซึ่งแม้ว่าจะเป็นคีย์ที่ประกอบด้วย 2 แอตทริบิวต์ขึ้นไปที่ระบุการเกิดเอนทิตี้ของอย่างน้อยหนึ่งแอ็ตทริบิวต์ที่ประกอบขึ้นเป็นคีย์คอมโพสิตนั้นไม่ใช่คีย์แบบง่ายในสิทธิ์ของตนเอง

คีย์ผสมประกอบด้วยองค์ประกอบที่อาจเป็นหรือไม่เป็นคีย์ต่างประเทศ ตัวอย่าง: ในตารางรายละเอียดธุรกรรมคีย์คือ (TransactionId, ItemNumber) รายละเอียดการทำธุรกรรมเป็น subentity ของการทำธุรกรรม TransactionId เป็นคีย์ต่างประเทศอ้างอิงตารางธุรกรรม ItemNumber ไม่ใช่กุญแจในตัวของมันเอง มันระบุเฉพาะรายการภายในบริบทของการทำธุรกรรมเดียว

คีย์ผสมคือกุญแจโดยส่วนใดส่วนหนึ่งของคีย์คือคีย์ต่างประเทศ ตัวอย่าง: ในระบบการจองโรงแรมการจองมีคีย์ผสม (GuestId, HotelId, ArrivalDate) GuestId ระบุแขกและอ้างอิงถึงตารางผู้เยี่ยมชม HotelId ระบุโรงแรมและอ้างอิงตารางโรงแรม ArrivalDate ระบุวันที่ อาจมีหรือไม่มีตารางวันที่ซึ่งอ้างอิง แต่จะระบุเอนทิตี (วันที่) ด้วยวิธีใดวิธีหนึ่ง

สิ่งที่ควรทราบอีกอย่างคือ factoid: คีย์อย่างง่ายคือคีย์ที่สร้างขึ้นจากหนึ่งคอลัมน์ในขณะที่คอมโพสิตคีย์ประกอบด้วยสองคอลัมน์ขึ้นไป


4
jcolebrand: "คีย์ผสมเป็นกุญแจที่ส่วนใดส่วนหนึ่งของคีย์สามารถระบุระเบียนได้" นั่นไม่ถูกต้อง ตามคำนิยามคีย์จะต้องลดลงไม่ได้ (Superkey น้อยที่สุด) หากจำเป็นต้องใช้คุณลักษณะบางอย่างเท่านั้นในการระบุ tuple โดยเฉพาะตามคำจำกัดความว่าเป็นซุปเปอร์คีย์ไม่ใช่คีย์
nvogel

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

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

2
"คีย์" ย่อมาจาก "candidate key" คำจำกัดความของตำราเรียนของคีย์ตัวเลือกคือและเป็น "superkey น้อยที่สุด" เสมอ การอ้างอิง: พจนานุกรมวันที่หน้า 17 หรือหนังสืออลิซหากคุณมีข้อสงสัยเกี่ยวกับคำจำกัดความของคีย์
nvogel

1
คำจำกัดความของ " คีย์ผสม " และ " คีย์ไซต์ " บนหน้าวิกิพีเดียมีการเปลี่ยนแปลงในวันที่ 13 กรกฎาคม 2557 และไม่ตรงกับคำจำกัดความในคำตอบนี้อีกต่อไป (ฉันไม่ได้เปลี่ยนคำจำกัดความเพียงแค่ชี้ให้เห็นว่าคำจำกัดความไม่ตรงกันในขณะนี้)
spencer7593

3

ในภาษาอังกฤษมันคือ "คีย์ผสม" ตัวอย่างเช่นลองดูที่เว็บไซต์ MSDN (การค้นหาใด ๆ ที่มี "คีย์ผสม sql" จะทำ)

http://www.google.com/search?q=sql+composite+key+site:msdn.microsoft.com

สมมติว่าคำถามเกี่ยวกับฐานข้อมูลเชิงสัมพันธ์ฉันค้นหาคำจำกัดความ "เป็นกลาง" ในWikipedia :

คีย์ผสมเป็นคีย์ที่ประกอบด้วยสองแอตทริบิวต์ขึ้นไปภายในตารางที่ (รวมกัน) ระบุระเบียนโดยไม่ซ้ำกัน


1
แหล่งที่มาไม่มีการอ้างอิงไม่มีการเชื่อมโยงไม่มีอะไรเลย ... คำตอบที่ไม่ดี


google.com/search?q=sql+composite+key+definitionจะนำคุณเข้าสู่เว็บไซต์หนึ่งล้านล้านแห่งที่พูดถึงคีย์ผสมของ SQL
Hemme

1
Google จะค้นหาคีย์ผสม
jcolebrand

3
นี่คือวิทยาศาสตร์: googlefight.com/…
Hemme

3

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

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


2

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

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