ฉันใช้ฐานข้อมูล MySQL ฉันมีความสับสนระหว่างคีย์หลักและคีย์เฉพาะ
โปรดช่วยฉันในที่ที่ฉันควรสร้างคีย์หลักและคีย์เฉพาะ ฉันหมายถึงสถานการณ์ที่เราสร้างคีย์เฉพาะหรือคีย์หลัก
ฉันใช้ฐานข้อมูล MySQL ฉันมีความสับสนระหว่างคีย์หลักและคีย์เฉพาะ
โปรดช่วยฉันในที่ที่ฉันควรสร้างคีย์หลักและคีย์เฉพาะ ฉันหมายถึงสถานการณ์ที่เราสร้างคีย์เฉพาะหรือคีย์หลัก
คำตอบ:
คีย์หลัก:
NULL
- เช่น MySQL เพิ่มNOT NULL
รหัสเฉพาะ:
NULL
ค่าได้NULL
; หลายแถวสามารถมีNULL
ค่าได้และอาจไม่ถือว่าเป็น "ที่ไม่ซ้ำกัน"คีย์ที่ไม่ซ้ำ (สหราชอาณาจักร) : เป็นคอลัมน์หรือกลุ่มของคอลัมน์ที่สามารถระบุเอกลักษณ์ในแถว
คีย์หลัก (PK) : นอกจากนี้ยังเป็นคอลัมน์หรือกลุ่มของคอลัมน์ที่สามารถระบุเอกลักษณ์ในแถว
ดังนั้นคีย์หลักเป็นเพียงชื่ออื่นสำหรับคีย์เฉพาะ แต่การใช้งานเริ่มต้นใน SQL Server นั้นแตกต่างกันสำหรับคีย์หลักและคีย์ที่ไม่ซ้ำกัน
โดยค่าเริ่มต้น:
มันขึ้นอยู่กับเป้าหมายของคุณเมื่อตัดสินใจว่าจะสร้างสหราชอาณาจักรหรือ PK มันเป็นไปตามการเปรียบเทียบเช่น "หากมีทีมสามคนดังนั้นพวกเขาทั้งหมดเป็นเพื่อน แต่จะมีหนึ่งในพวกเขาที่จะเป็นคู่หู: PK และสหราชอาณาจักรมีความสัมพันธ์คล้ายกัน" ฉันขอแนะนำให้อ่านบทความนี้: ตัวอย่างที่ผู้เขียนอาจดูไม่เหมาะสม แต่พยายามเข้าใจแนวคิดโดยรวม
http://tsqltips.blogspot.com/2012/06/difference-between-unique-key-and.html
[table_name]_pkey
) ลงในตาราง (ฉันได้ยินชื่อนี้เรียกว่าคีย์ตัวแทน) ที่มา: postgresqltutorial.com/postgresql-primary-keyฉันใหม่ทั้งหมดนี้ดังนั้นฉันขอขอบคุณโปสเตอร์ที่มีความรู้มากกว่านี้เพื่อชี้ให้เห็นถึงความแตกต่างที่ฉันพลาดไป
สำหรับองค์กรหรือธุรกิจมีหน่วยงานทางกายภาพมากมาย (เช่นบุคคลทรัพยากรเครื่องจักร ฯลฯ ) และหน่วยงานเสมือน (งานกิจกรรมธุรกรรมกิจกรรม) โดยทั่วไปแล้วธุรกิจจำเป็นต้องบันทึกและประมวลผลข้อมูลขององค์กรธุรกิจเหล่านั้น คีย์ธุรกิจจะถูกระบุภายในโดเมนธุรกิจทั้งหมดโดยใช้คีย์
ตามความคาดหวังของ RDBMS คีย์ (aka Candidate Key) เป็นค่าหรือชุดของค่าที่ระบุเอนทิตีเฉพาะ
สำหรับ DB-Table จะมีคีย์จำนวนมากและอาจมีสิทธิ์สำหรับคีย์หลัก ดังนั้นคีย์ทั้งหมดคีย์หลักคีย์เฉพาะ ฯลฯ จะถูกเรียกรวมกันเป็นคีย์ผู้สมัคร อย่างไรก็ตาม DBA เลือกคีย์จากคีย์ตัวเลือกสำหรับการค้นหาเรคคอร์ดเรียกว่าคีย์หลัก
ความแตกต่างระหว่างคีย์หลักและคีย์เฉพาะ
1. พฤติกรรม: คีย์หลักใช้เพื่อระบุแถว (บันทึก) ในตารางในขณะที่คีย์ซ้ำคือการป้องกันค่าที่ซ้ำกันในคอลัมน์ (ยกเว้นรายการที่เป็นโมฆะ)
2. การจัดทำดัชนี: โดยค่าเริ่มต้น SQL-engine จะสร้างดัชนีแบบกลุ่มบนคีย์หลักหากไม่มีอยู่และไม่มีการทำดัชนีแบบกลุ่มบนคีย์ซ้ำ
3. Nullability:คีย์หลักไม่รวมค่า Null ในขณะที่ Unique-key can
4. การดำรงอยู่:ตารางสามารถมีได้ไม่เกินหนึ่งคีย์หลัก แต่สามารถมีได้หลายคีย์ที่ไม่ซ้ำกัน
5. ความสามารถในการปรับเปลี่ยนได้:คุณไม่สามารถเปลี่ยนหรือลบค่าหลักได้ แต่สามารถใช้ค่าคีย์เฉพาะ
สำหรับข้อมูลเพิ่มเติมและตัวอย่าง:
คีย์หลักจะต้องไม่ซ้ำกัน
คีย์ที่ไม่ซ้ำกันไม่จำเป็นต้องเป็นคีย์หลัก - ดูรหัสตัวเลือก
นั่นคืออาจมีมากกว่าหนึ่งชุดของคอลัมน์ในตารางที่สามารถระบุแถวโดยไม่ซ้ำ - เฉพาะหนึ่งในเหล่านี้สามารถเลือกเป็นคีย์หลัก ส่วนอื่น ๆ ที่ไม่ซ้ำกันคือกุญแจตัวเลือก
ความแตกต่างระหว่างคีย์หลักและคีย์เฉพาะ
+-----------------------------------------+-----------------------------------------------+ | Primary Key | Unique Key | +-----------------------------------------+-----------------------------------------------+ | Primary Key can't accept null values. | Unique key can accept only one null value. | +-----------------------------------------+-----------------------------------------------+ | By default, Primary key is clustered | By default, Unique key is a unique | | index and data in the database table is | non-clustered index. | | physically organized in the sequence of | | | clustered index. | | +-----------------------------------------+-----------------------------------------------+ | We can have only one Primary key in a | We can have more than one unique key in a | | table. | table. | +-----------------------------------------+-----------------------------------------------+ | Primary key can be made foreign key | In SQL Server, Unique key can be made foreign | | into another table. | key into another table. | +-----------------------------------------+-----------------------------------------------+
คุณสามารถค้นหาข้อมูลโดยละเอียดได้จาก:
http://www.dotnet-tricks.com/Tutorial/sqlserver/V2bS260912-Difference-between-Primary-Key-and-Unique-Key.html
คีย์หลักมีความหมายของการระบุแถวของฐานข้อมูล ดังนั้นอาจมีคีย์หลักเพียงคีย์เดียวเท่านั้นสำหรับตารางที่กำหนดในขณะที่สามารถมีได้หลายคีย์ที่ไม่ซ้ำกัน
ด้วยเหตุผลเดียวกันคีย์หลักไม่สามารถเป็น NULL ได้ (อย่างน้อยใน Oracle, ไม่แน่ใจเกี่ยวกับฐานข้อมูลอื่น ๆ )
เนื่องจากไม่ได้ระบุแถวจึงไม่ควรเปลี่ยนแปลง การเปลี่ยนกุญแจหลักถูกผูกไว้เพื่อก่อให้เกิดความเจ็บปวดอย่างรุนแรงและอาจเป็นการสาปแช่งนิรันดร์
ในกรณีส่วนใหญ่คุณต้องการ id ปลอมบางตัวสำหรับคีย์หลักซึ่งไม่ได้ใช้สำหรับอะไรเลยนอกจากการระบุแถวเดียวในตาราง
ปุ่มที่ไม่ซ้ำกันอาจเปลี่ยนแปลงได้มากเท่าที่คุณต้องการ
คีย์หลักเป็นคีย์เฉพาะ
แต่ละตารางจะต้องมีที่มากที่สุด ONE คีย์หลัก แต่ก็สามารถมีคีย์ที่ไม่ซ้ำกันหลาย ๆ คีย์หลักถูกใช้เพื่อระบุแถวของตารางโดยไม่ซ้ำกัน คีย์หลักไม่สามารถอยู่ได้NULL
เนื่องจากNULL
ไม่ใช่ค่า
ฉันรู้ว่าคำถามนี้มีอายุหลายปี แต่ฉันต้องการที่จะให้คำตอบสำหรับการอธิบายนี้ทำไมมากกว่า
วัตถุประสงค์ของคีย์หลัก : เพื่อระบุแถวในฐานข้อมูลที่ไม่ซ้ำกัน => แถวหมายถึงอินสแตนซ์เดียวของประเภทเอนทิตีที่จำลองโดยตาราง คีย์หลักบังคับใช้ integrity ของเอนทิตี AKA Entity Integrity คีย์หลักจะเป็นดัชนีคลัสเตอร์คือมันกำหนดลำดับที่ข้อมูลจะถูกเก็บไว้ในตาราง
วัตถุประสงค์ของคีย์ที่ไม่ซ้ำ : ตกลงด้วยคีย์หลักเรามีวิธีในการระบุแถวโดยไม่ซ้ำกัน แต่ฉันมีความต้องการทางธุรกิจเช่นนั้นคอลัมน์อื่น / ชุดคอลัมน์ควรมีค่าที่ไม่ซ้ำกัน ในทางเทคนิคแล้วคอลัมน์นี้มีความเป็นเอกลักษณ์จึงอาจเป็นตัวเลือกในการบังคับใช้เอนทิตีที่สมบูรณ์ แต่สำหรับทุกคนที่เรารู้คอลัมน์นี้สามารถมีข้อมูลที่มาจากองค์กรภายนอกที่ฉันอาจมีข้อสงสัยเกี่ยวกับการเป็นเอกลักษณ์ ฉันไม่อาจเชื่อถือได้เพื่อให้มีความสมบูรณ์ของเอนทิตี ฉันแค่ทำให้มันเป็นกุญแจสำคัญที่ไม่ซ้ำกันเพื่อตอบสนองความต้องการทางธุรกิจของฉัน
ไปแล้ว!
หากการออกแบบฐานข้อมูลของคุณนั้นไม่จำเป็นต้องใช้รหัสที่ต่างประเทศคุณสามารถใช้รหัสที่ไม่ซ้ำกันได้ ( แต่จำไว้ว่ารหัสที่ไม่ซ้ำกันอนุญาตให้มีค่า Null เดียว )
หากฐานข้อมูลของคุณต้องการคีย์ต่างประเทศคุณจะไม่ต้องเลือกคีย์หลัก
เพื่อดูความแตกต่างระหว่างการเยี่ยมชมที่ไม่ซ้ำกับคีย์หลัก ที่
คีย์ที่ไม่ซ้ำ: - มันควรจะใช้เมื่อคุณต้องให้ค่าที่ไม่ซ้ำกันในกรณีของคีย์ที่ไม่ซ้ำกันก็หมายความว่าได้รับอนุญาตค่า null คีย์ที่ไม่ซ้ำกันคือคีย์เหล่านั้นซึ่งเป็นเอกลักษณ์และไม่เหมือนกันในคอลัมน์นั้นเช่นชื่อสัตว์เลี้ยงของคุณ .it ไม่ได้เป็นอะไรที่เป็นโมฆะและถ้าคุณถามในบริบทของฐานข้อมูลคุณจะต้องสังเกตว่าทุกค่าจะแตกต่างจากค่าอื่นในฐานข้อมูล ยกเว้น SQL Server โดยที่ null = null เป็นจริง
คีย์หลัก: - มันควรใช้เมื่อคุณต้องระบุ row.primary เป็นคีย์ที่ไม่ซ้ำกันสำหรับทุกแถวในฐานข้อมูลข้อ จำกัด คือไม่อนุญาตให้มีค่าว่างดังนั้นคุณอาจเห็นว่าฐานข้อมูล มีคอลัมน์ซึ่งเป็นการเพิ่มอัตโนมัติและเป็นคีย์หลักของตาราง รวมทั้งจะสามารถนำมาใช้เป็นคีย์ต่างประเทศใน table.example อื่นสามารถOrderID ตารางการสั่งซื้อ , billId ในตารางการเรียกเก็บเงิน
ตอนนี้กลับมาสู่สถานการณ์เมื่อใช้: -
1) คีย์หลักในคอลัมน์ที่ไม่สามารถเป็นโมฆะในตารางและคุณใช้เป็นคีย์ต่างประเทศในตารางอื่นสำหรับการสร้างความสัมพันธ์
2) คีย์เฉพาะในตารางที่ไม่มีผลกระทบในตารางหรือในฐานข้อมูลทั้งหมดไม่ว่าคุณจะใช้ null สำหรับคอลัมน์เฉพาะเช่นของว่างในร้านอาหารมันเป็นไปได้ที่คุณจะไม่ใช้ของว่างในร้านอาหาร
ความแตกต่างระหว่างคีย์หลักและคีย์เฉพาะ
ทั้งสองPrimary key
และUnique Key
ใช้เพื่อกำหนดแถวในตารางโดยไม่ซ้ำกัน
Primary Key
สร้างของคอลัมน์ในขณะที่clustered index
Unique creates an unclustered index of the column
A Primary Key
ไม่อนุญาตให้มีNULL value
แต่จะช่วยให้a Unique Key
one NULL value
ซิงเกิ้ลคีย์หลักคือเอกลักษณ์และไม่สามารถเป็นโมฆะไม่ซ้ำใครสามารถเป็นโมฆะและอาจไม่ซ้ำกัน
may not be unique
นี่หมายความว่าอย่างไร
จุดประสงค์หลักของคีย์หลักคือการให้วิธีการระบุแต่ละระเบียนในตาราง
คีย์หลักมีวิธีการระบุตัวตนของแถวโดยใช้ข้อมูลภายในแถว คีย์หลักสามารถอ้างอิงได้ตั้งแต่หนึ่งคอลัมน์ขึ้นไปเช่นชื่อและนามสกุล อย่างไรก็ตามในการออกแบบหลาย ๆ คีย์หลักคือหมายเลขที่สร้างขึ้นโดยอัตโนมัติจากคอลัมน์ข้อมูลประจำตัว
คีย์หลักมีคุณสมบัติดังต่อไปนี้:
คีย์เฉพาะจะเรียกว่าข้อ จำกัด ที่ไม่ซ้ำกัน ข้อ จำกัด ที่ไม่ซ้ำกันสามารถนำมาใช้เพื่อให้แน่ใจว่าแถวจะไม่ซ้ำกันภายในฐานข้อมูล
เราไม่ได้ทำอย่างนั้นกับคีย์หลัก? ใช่เราทำ แต่ตารางอาจมีคอลัมน์หลายชุดที่คุณต้องการไม่ซ้ำกัน
ใน SQL Server คีย์เฉพาะมีคุณสมบัติดังต่อไปนี้:
แหล่งที่มา: ที่นี่
คุณสมบัติหลักของคีย์หลักคือ:
มันจะต้องมีค่าที่ไม่ซ้ำกันสำหรับแต่ละแถวของข้อมูล มันไม่สามารถมีค่าเป็นศูนย์ คีย์หลักเดียวเท่านั้นในตาราง
คุณสมบัติหลักของคีย์ที่ไม่ซ้ำคือ:
นอกจากนี้ยังสามารถมีค่าที่ไม่ซ้ำกันสำหรับแต่ละแถวของข้อมูล
นอกจากนี้ยังสามารถมีค่าเป็นศูนย์
คีย์ไม่ซ้ำกันหลายตัวในตาราง
PRIMARY KEY = UNIQUE KEY + Not Null CONSTRAINT