คำถามติดแท็ก primary-key

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

5
เมื่อใดควรประกาศคีย์หลักที่ไม่ใช่แบบคลัสเตอร์
ในขณะที่สร้างฐานข้อมูลทดสอบสำหรับคำถามอื่นที่ฉันถามไปก่อนหน้านี้ฉันจำเกี่ยวกับคีย์หลักที่สามารถประกาศได้ NONCLUSTERED คุณจะใช้NONCLUSTEREDคีย์หลักตรงข้ามกับCLUSTEREDคีย์หลักเมื่อใด ขอบคุณล่วงหน้า

7
Guid vs INT - คีย์ไหนดีกว่ากัน?
ผมเคยถูกอ่านไปรอบ ๆ เหตุผลที่จะใช้หรือไม่และGuidint intมีขนาดเล็กลงเร็วขึ้นและง่ายต่อการจดจำตามลำดับเวลา และสำหรับGuidข้อได้เปรียบเดียวที่ฉันพบคือมันไม่เหมือนใคร ในกรณีGuidใดจะดีกว่าintและทำไม? จากสิ่งที่ฉันเห็นintไม่มีข้อบกพร่องยกเว้นโดยการ จำกัด จำนวนซึ่งในหลายกรณีไม่เกี่ยวข้อง ทำไมถึงถูกGuidสร้างขึ้นมา? ฉันคิดว่ามันมีจุดประสงค์อื่นนอกเหนือจากการให้บริการเป็นกุญแจหลักของตารางง่ายๆ (ตัวอย่างของแอปพลิเคชันจริงที่ใช้Guidกับบางสิ่ง) (Guid = UniqueIdentifier) ​​พิมพ์บน SQL Server

5
การทำงานของดัชนีใน PostgreSQL
ฉันมีคำถามสองสามข้อเกี่ยวกับการทำงานของดัชนีใน PostgreSQL ฉันมีFriendsตารางที่มีดัชนีต่อไปนี้: Friends ( user_id1 ,user_id2) user_id1และuser_id2เป็นกุญแจต่างประเทศเข้าสู่userตาราง สิ่งเหล่านี้เทียบเท่ากันหรือไม่ ถ้าไม่เช่นนั้นทำไม Index(user_id1,user_id2) and Index(user_id2,user_id1) ถ้าฉันสร้างคีย์หลัก (user_id1, user_id2) มันจะสร้างดัชนีให้โดยอัตโนมัติหรือไม่ หากดัชนีในคำถามแรกไม่เท่ากันดัชนีใดจะถูกสร้างขึ้นบนคำสั่งคีย์หลักด้านบน

3
ข้อเสียของการใช้ UUID หรือ GUID เป็นคีย์หลักคืออะไร
ฉันต้องการสร้างระบบแบบกระจาย ฉันต้องการจัดเก็บข้อมูลในฐานข้อมูลและจะเป็นประโยชน์ในการใช้UUIDหรือGUIDเป็นคีย์หลักในบางตาราง ฉันคิดว่ามันเป็นข้อเสียของการออกแบบนี้เนื่องจาก UUID / GUID ค่อนข้างใหญ่และพวกมันเกือบจะสุ่ม ทางเลือกคือการใช้ INT เพิ่มขึ้นอัตโนมัติหรือยาว ข้อเสียของการใช้ UUID หรือ GUID เป็นคีย์หลักสำหรับตารางของฉันคืออะไร ฉันอาจจะใช้ Derby / JavaDB (บนไคลเอนต์) และ PostgreSQL (บนเซิร์ฟเวอร์) เป็น DBMS

3
ทุกตารางควรมีคีย์หลักตัวแทน / ฟิลด์หลักเทียมหรือไม่
ฉันเข้าใจถึงประโยชน์อย่างหนึ่งของคีย์ตัวแทนเสมือน / คีย์ประดิษฐ์โดยทั่วไป - มันไม่เปลี่ยนแปลงและสะดวกสบายมาก สิ่งนี้เป็นจริงไม่ว่าจะเป็นเขตข้อมูลเดียวหรือหลายเขตข้อมูลตราบใดที่พวกเขาเป็น 'ประดิษฐ์' อย่างไรก็ตามบางครั้งดูเหมือนว่าเป็นเรื่องของนโยบายที่จะมีฟิลด์จำนวนเต็มที่เพิ่มขึ้นอัตโนมัติเป็นคีย์หลักของแต่ละตาราง นี่เป็นความคิดที่ดีที่สุดเสมอหรือไม่ที่จะมีคีย์ฟิลด์เดียวและทำไม (หรือทำไมไม่) เพื่อความชัดเจนคำถามนี้ไม่เกี่ยวกับการประดิษฐ์เทียบกับธรรมชาติ แต่เกี่ยวกับว่ากุญแจเทียมทั้งหมดควรเป็นแบบ Single-field หรือไม่

2
ลำดับของคอลัมน์ในดัชนี PK มีความสำคัญหรือไม่?
ฉันมีตารางที่มีขนาดใหญ่มากไม่กี่แห่งที่มีโครงสร้างพื้นฐานแบบเดียวกัน แต่ละคนมีRowNumber (bigint)และDataDate (date)คอลัมน์ ข้อมูลถูกโหลดโดยใช้ SQLBulkImport ทุกคืนและไม่มีการโหลดข้อมูล "ใหม่" - บันทึกประวัติ (SQL Standard ไม่ใช่ Enterprise ดังนั้นจึงไม่มีการแบ่งพาร์ติชัน) เนื่องจากข้อมูลแต่ละบิตจำเป็นต้องเชื่อมโยงกลับไปที่ระบบอื่น ๆ และการRowNumber/DataDateรวมกันแต่ละครั้งไม่ซ้ำกันนั่นคือคีย์หลักของฉัน ฉันสังเกตเห็นว่าเนื่องจากวิธีที่ฉันกำหนด PK ใน SSMS Table Designer RowNumberแสดงรายการที่หนึ่งและDataDateสอง ฉันยังสังเกตเห็นว่าการกระจายตัวของฉันมักจะสูงมาก ~ 99% ตอนนี้เพราะแต่ละรายการDataDateปรากฏเพียงครั้งเดียวฉันคาดว่าเครื่องมือสร้างดัชนีจะเพิ่มไปยังหน้าเว็บในแต่ละวัน แต่ฉันสงสัยว่าจริง ๆ แล้วการจัดทำดัชนีอิงตามลำดับRowNumberแรกหรือไม่และต้องเปลี่ยนทุกอย่างอื่นหรือไม่ Rownumberไม่ใช่คอลัมน์ข้อมูลประจำตัว แต่เป็น int ที่สร้างขึ้นโดยระบบภายนอก (น่าเศร้า) DataDateมันรีเซ็ตในช่วงเริ่มต้นของแต่ละคน ตัวอย่างข้อมูล RowNumber | DataDate | a | b | c..... 1 |2013-08-01| …

1
ต้องการดัชนีสำหรับคีย์ต่างประเทศ
ฉันกำลังดิ้นรนกับดัชนีคีย์หลักและคีย์ต่างประเทศ ... และความต้องการของพวกเขาทั้งหมด ถ้าฉันมีสองตารางทั้งสองจะมีจำนวนเต็มเป็นคีย์หลัก ตารางแรกอ้างอิงผ่าน FK ไปยังคีย์หลักของตารางที่สอง ในตารางทั้งสองฉันมีดัชนีคีย์หลักในคอลัมน์ ID ฉันสร้างข้อ จำกัด FK ในการtable1.ref_fieldอ้างอิง PK ของตารางที่สอง ( table2.id) และฉันเพิ่มดัชนีบน table1.ref_field นี่เป็นวิธีที่ดีที่สุดในการจัดระเบียบดัชนีคีย์หลักและคีย์ต่างประเทศหรือไม่

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

3
คีย์หลักของอักขระเทียบกับจำนวนเต็ม
ฉันกำลังออกแบบฐานข้อมูลด้วยตารางการค้นหาหลายตารางที่มีคุณลักษณะที่เป็นไปได้ของเอนทิตีหลัก ฉันกำลังคิดที่จะใช้คีย์ 4 หรือ 5 ตัวอักษรเพื่อระบุค่าการค้นหาเหล่านี้แทนที่จะเป็นจำนวนเต็มที่เพิ่มขึ้นโดยอัตโนมัติดังนั้นเมื่อฉันเก็บ ID แอตทริบิวต์เหล่านี้ไว้ในตารางหลักฉันจะเห็นค่าที่มีความหมายมากกว่าแค่ตัวเลขสุ่ม ความหมายด้านประสิทธิภาพของการใช้ฟิลด์อักขระเป็นคีย์หลักแทนที่จะเป็นจำนวนเต็มมีอะไรบ้าง ฉันใช้ MySQL ถ้าเรื่องนั้น [แก้ไข] ตารางค้นหาเหล่านี้มีการเพิ่มระเบียนใหม่นาน ๆ ครั้ง พวกเขาจะดูแลด้วยตนเองและคีย์ตามตัวอักษรจะถูกสร้างขึ้นด้วยตนเองเช่นกัน นี่คือตัวอย่าง: CUISINES ID Description ----- -------------- CHNSE Chinese ITALN Italian MXICN Mexican

1
ฉันจะเปลี่ยนคีย์หลักที่มีอยู่ใน SQL Azure ได้อย่างไร
ฉันต้องการแก้ไขคีย์หลักที่มีอยู่ในตาราง SQL Azure ปัจจุบันมีหนึ่งคอลัมน์และฉันต้องการเพิ่มอีกคอลัมน์ ตอนนี้ใน SQL Server 2008 นี่เป็นเค้กชิ้นหนึ่งเพียงแค่ทำใน SSMS เท่านั้น เสร็จสิ้น นี่คือลักษณะที่ปรากฏของ PK ถ้าฉันเขียนสคริปต์จาก SQL Server: ALTER TABLE [dbo].[Friend] ADD CONSTRAINT [PK_Friend] PRIMARY KEY CLUSTERED ( [UserId] ASC, [Id] ASC ) อย่างไรก็ตามใน SQL Azure เมื่อฉันพยายามเรียกใช้งานข้างต้นแน่นอนว่ามันจะล้มเหลว: Table 'Friend' already has a primary key defined on it. ไม่เป็นไรฉันก็เลยลองวางกุญแจ: Tables without a …

1
วิธีการตั้งค่าหลายสาขาเป็นคีย์หลักใน MySQL?
ฉันมีโต๊ะที่มีทุ่งนา EmployeeID blahblah blahblah2 ..... RecordMonth RecodrdYear ดังนั้นพนักงานแต่ละคนควรมีรายการที่ตรงกันสำหรับเดือน, ปี, Emp # ฉันจะตั้งค่าตารางได้อย่างไร ดังนั้นฉันจะตั้งค่าตารางอย่างไรเพื่อให้ EmployeeID สามารถอัปเดตเดือนละครั้ง แต่ไม่สามารถมีสองรายการสำหรับเดือนและปีที่ตรงกันได้

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

4
อะไรคือความแตกต่างระหว่างคีย์หลักและซุปเปอร์คีย์ใน DBMS
ฉันใหม่สำหรับ DBMS และฉันยังคงเรียนรู้ทฤษฎี ฉันสับสนกับธุรกิจหลักนี้และหลังจาก googling ฉันได้ จำกัด ให้เหลือเพียง 2 ปุ่มเท่านั้นฉันไม่ได้รับ (หลักและกุญแจหลัก) ฉันมีคำถามสองสามข้อเกี่ยวกับ DBMS ฉันจะขอบคุณถ้าคุณสามารถตอบพวกเขาสำหรับฉัน 1) อะไรคือความแตกต่างระหว่างคีย์หลักและซุปเปอร์คีย์ใน DBMS? ขอขอบคุณอย่างสูงหากคุณสามารถใช้ตัวอย่างที่ครอบคลุมเพื่ออธิบายอย่างถูกต้อง 2) คีย์หลักและ Super key ทั้งสองสามารถรวมกันหลายคอลัมน์เพื่อสร้างคีย์หลักและซุปเปอร์คีย์ได้หรือไม่ 3) คีย์หลักเป็นชุดย่อยของ Super key หรือในทางกลับกัน

4
เหตุใด Postgres จึงสร้างค่า PK ที่ใช้ไปแล้ว
ฉันใช้ Django และทุกครั้งที่ฉันได้รับข้อผิดพลาด: IntegrityError: ค่าคีย์ที่ซ้ำกันละเมิดข้อ จำกัด ที่ไม่ซ้ำกัน "myapp_mymodel_pkey" ราย ละเอียด: Key (id) = (1) มีอยู่แล้ว จริง ๆ แล้วฐานข้อมูล Postgres ของฉันมีวัตถุmyapp_mymodel ที่มีคีย์หลักเป็น 1 เหตุใด Postgres จะพยายามใช้คีย์หลักนั้นอีกครั้ง หรือนี่เป็นไปได้มากว่าแอปพลิเคชันของฉัน (หรือ ORM ของ Django) เป็นสาเหตุให้เกิดปัญหานี้ ปัญหานี้เกิดขึ้น 3 ครั้งติดต่อกันตอนนี้ สิ่งที่ฉันได้พบก็คือว่าเมื่อมันไม่เกิดขึ้นมันเกิดขึ้นหนึ่งครั้งหรือมากกว่าในแถวในตารางที่ระบุนั้นไม่ได้อีกครั้ง ดูเหมือนว่าจะเกิดขึ้นสำหรับทุกตารางก่อนที่จะหยุดอย่างสมบูรณ์สำหรับวันที่เกิดขึ้นเป็นเวลาอย่างน้อยหนึ่งนาทีหรือดังนั้นต่อตารางเมื่อมันเกิดขึ้นและจะเกิดขึ้นเป็นระยะ ๆ เท่านั้น (ไม่ตารางทั้งหมดทันที) ความจริงที่ว่าข้อผิดพลาดนี้เป็นระยะ ๆ (เกิดขึ้นเพียง 3 ครั้งหรือมากกว่านั้นใน 2 สัปดาห์ - ไม่มีการโหลดอื่น ๆ บนฐานข้อมูลเพียงฉันทดสอบใบสมัครของฉัน) …

5
ทำไมคีย์หลักถึงมีชื่อเป็นของตนเอง
จากมุมมองทางคณิตศาสตร์เมื่อพิจารณาว่าตารางมีคีย์หลักมากที่สุดหนึ่งตัวดูเหมือนว่าเป็นการตัดสินใจแบบสั้น ๆ ที่อ้างถึงคีย์หลักโดยใช้ชื่อโดยพลการแทนชื่อของคุณสมบัติตารางธรรมดา ผลที่ตามมาคือการเปลี่ยนคีย์หลักจาก nonclustered เป็นคลัสเตอร์หรือในทางกลับกันคุณต้องค้นหาชื่อก่อนแล้วปล่อยมันและอ่านมันในที่สุด มีประโยชน์ในการใช้ชื่อโดยพลการที่ฉันไม่เห็นหรือมี DBMS ไม่ใช้ชื่อโดยพลการสำหรับคีย์หลัก? แก้ไข 2011-02-22 (02/22/2011 สำหรับผู้ที่ไม่ต้องการเรียงวันที่): ให้ฉันแสดงฟังก์ชั่นที่คุณสามารถหาชื่อของคีย์หลักจากชื่อตาราง (ใช้ตารางระบบ sybase sql-Sever aka หรือต้น): create function dbo.get_pk (@tablename sysname) returns sysname as begin return (select k.name from sysobjects o join sysobjects k on k.parent_obj = o.id where o.name = @tablename and o.type = 'U' and …

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