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

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

4
MySQL: เหตุใด auto_increment จึง จำกัด เฉพาะแค่คีย์หลัก?
ฉันรู้ว่า MySQL จำกัด คอลัมน์ auto_increment ไว้ที่คีย์หลัก ทำไมนี้ ความคิดแรกของฉันคือมันเป็นข้อ จำกัด ด้านประสิทธิภาพเนื่องจากอาจมีบางตัวนับตารางบางแห่งที่ต้องถูกล็อคเพื่อรับค่านี้ ทำไมฉันจึงไม่มีคอลัมน์ auto_increment หลายคอลัมน์ในตารางเดียวกัน ขอบคุณ

3
ฉันควรเพิ่มฟิลด์การเพิ่ม / ตัวตนอัตโนมัติลงในตารางตัวอ้างอิงโยงเพื่อวัตถุประสงค์ในการ PK หรือไม่
ฉันเพิ่มตารางการอ้างอิงโยงต่อไปนี้ในฐานข้อมูลที่โฮสต์บน SQL Server ของฉัน: company_id bigint not null (FK) org_path nvarchar (2048) not null company_idข้อมูลหมายถึงidข้อมูลในตารางอื่น (ซึ่งมันเป็นคีย์หลัก) ระบุว่ายังสามารถมีได้หลายระเบียนด้วยเหมือนกัน company_idคีย์หลักใด ๆ จะต้องใช้ทั้งสองเขตข้อมูล อย่างไรก็ตามฉันไม่สามารถสร้างคีย์โดยใช้ทั้งสองฟิลด์ได้เนื่องจากorg_pathSQL Server ยาวเกินไป สำหรับorg_pathนี่เป็นตารางเดียวที่มีอยู่ มีโอกาสทุกคนที่คำสั่งไปยังตารางนี้จะถูกถามอย่างใดอย่างหนึ่งคือทุกรายการหรือทุกรายการโดยorg_path company_idหรือจะใช้วิธีอื่นดูน่าสงสัยว่าตารางนี้จะถูกสอบถามโดยorg_pathหรือจะนำไปทางอื่นก็มีลักษณะที่น่าสงสัยว่าตารางนี้จะเคยได้รับการสอบถามโดยนอกจากนี้ยังไม่น่าorg_pathจะมีการอัปเดตและมีแนวโน้มที่จะถูกแทรกและอาจถูกลบ ฉันคาดหวังว่าจำนวนแถวทั้งหมดจะอยู่ในพันต่ำ นอกจากนี้สาเหตุที่nvarchar (2048)เป็นเพราะค่าต้องเลียนแบบในฐานข้อมูลบุคคลที่สาม ตัวอย่างทั่วไปจะเป็นสิ่งที่ต้องการ \Translation Providers\[customer name]\[order name]\ และสามารถมีกำกับได้ ดังนั้นคำถามของฉันคือ: มันจะมีประสิทธิภาพมากขึ้นในการเพิ่มidเขตข้อมูลการเพิ่มอัตโนมัติและใช้ร่วมกับcompany_idเป็นคีย์หลักหรือมันจะเพิ่มค่าใช้จ่ายที่ไม่จำเป็น - และความจริงที่ว่าcompany_idเป็นคีย์หลักในตารางอื่นมี ผลที่นี่?

2
SQL Server เทียบเท่ากับ Oracle USING clause
มี SQL Server 2008 เทียบเท่ากับ USING INDEX clause ใน Oracle หรือไม่? เฉพาะสำหรับการสร้าง: CREATE TABLE c(c1 INT, c2 INT); CREATE INDEX ci ON c (c1, c2); ALTER TABLE c ADD CONSTRAINT cpk PRIMARY KEY (c1) USING INDEX ci; ในเอกสารเซิร์ฟเวอร์ SQL ในดัชนีที่ไม่ซ้ำจะระบุ (เน้นเพิ่ม): มีการใช้ดัชนีที่ไม่ซ้ำกันในวิธีต่อไปนี้: คีย์หลักหรือข้อ จำกัด ที่ไม่ซ้ำกัน เมื่อคุณสร้างข้อ จำกัด คีย์หลักดัชนีคลัสเตอร์ที่ไม่ซ้ำกันในคอลัมน์หรือคอลัมน์ที่ถูกสร้างขึ้นโดยอัตโนมัติหากดัชนีคลัสเตอร์บนโต๊ะไม่ได้อยู่แล้วและคุณไม่ได้ระบุดัชนี nonclustered ที่ไม่ซ้ำกัน …

3
มันมีเหตุผลที่จะทำเครื่องหมายคอลัมน์ทั้งหมด แต่เป็นหนึ่งในคีย์หลัก?
ฉันมีโต๊ะที่เป็นตัวแทนของภาพยนตร์ เขตข้อมูลคือ: id (PK), title, genre, runtime, released_in, tags, origin, downloads. ฐานข้อมูลของฉันไม่สามารถปนเปื้อนด้วยแถวที่ซ้ำกันดังนั้นฉันต้องการบังคับใช้ซ้ำ ปัญหาคือว่าภาพยนตร์ที่แตกต่างกันอาจมีชื่อเดียวกันหรือแม้กระทั่งเขตเดียวกันยกเว้นและtags downloadsวิธีการบังคับใช้เอกลักษณ์? ฉันคิดถึงสองวิธี: สร้างฟิลด์ทั้งหมดยกเว้นdownloadsคีย์หลัก ฉันติดตามdownloadsเพราะมันเป็น JSON และอาจส่งผลกระทบต่อประสิทธิภาพการทำงาน เก็บidเป็นคีย์หลักเท่านั้น แต่เพิ่มข้อ จำกัด ที่ไม่ซ้ำกับคอลัมน์อื่น ๆ ทั้งหมด (ยกเว้นอีกครั้งdownloads) ฉันอ่านคำถามซึ่งคล้ายกันมาก แต่ฉันไม่เข้าใจว่าฉันควรทำอย่างไร ขณะนี้ตารางนี้ไม่เกี่ยวข้องกับตารางอื่น ๆ แต่ในอนาคตอาจเป็น ในขณะนี้ฉันมีบันทึกน้อยกว่า 20,000 รายการเล็กน้อย แต่ฉันคาดว่าจำนวนจะเพิ่มขึ้น ฉันไม่รู้ว่าสิ่งนี้เกี่ยวข้องกับปัญหาหรือไม่ แก้ไข:ฉันแก้ไขสคีมาและนี่คือวิธีที่ฉันจะสร้างตาราง: CREATE TABLE movies ( id serial PRIMARY KEY, title text NOT NULL, runtime …

2
SQL Server เลือกคีย์ดัชนีสำหรับการอ้างอิงคีย์ต่างประเทศอย่างไร
ฉันทำงานกับฐานข้อมูลดั้งเดิมที่นำเข้าจาก MS Access มีตารางประมาณยี่สิบตารางที่มีคีย์หลักที่ไม่ซ้ำกันและไม่ซ้ำกันซึ่งสร้างขึ้นในระหว่างการเข้าถึง MS> SQL Server อัพเกรด ตารางเหล่านี้จำนวนมากยังมีดัชนีที่ไม่ซ้ำกันและไม่ทำคลัสเตอร์ซึ่งซ้ำกันของคีย์หลัก ฉันพยายามทำความสะอาด แต่สิ่งที่ฉันได้พบคือหลังจากที่ฉันสร้างคีย์หลักใหม่เป็นดัชนีคลัสเตอร์จากนั้นพยายามสร้างคีย์ต่างประเทศคีย์ต่างประเทศคือการอ้างอิงดัชนีเก่าที่ซ้ำกัน (ซึ่งไม่ซ้ำกัน) ฉันรู้สิ่งนี้เพราะมันจะไม่ให้ฉันปล่อยดัชนีที่ซ้ำกัน ฉันคิดว่า SQL Server จะเลือกคีย์หลักเสมอหากมีอยู่ SQL Server มีวิธีเลือกระหว่างดัชนีที่ไม่ซ้ำกันและคีย์หลักหรือไม่ ในการทำซ้ำปัญหา (บน SQL Server 2008 R2): IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Child') DROP TABLE Child GO IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Parent') …

3
ต้องการความช่วยเหลือในการแก้ไขปัญหาสถานการณ์การหยุดชะงักของ SQL Server 2005
ฉันกำลังทำงานในสถานการณ์การหยุดชะงักที่ผู้เข้าร่วมเพียงคนเดียวในการหยุดชะงักดูเหมือนจะเป็นตารางเดียวและขั้นตอนการจัดเก็บเดียวที่ถูกลบออกจากตารางนั้น ฉันดึงข้อสรุปนั้นจากการวิเคราะห์บันทึกข้อผิดพลาด sql ของฉันในช่วงเวลาของการหยุดชะงักหลายครั้งโดยใช้บทความ MSDN ด้านล่างเป็นแนวทางในการถอดรหัสการติดตามในบันทึกข้อผิดพลาด ตาราง DEXTable และขั้นตอนการจัดเก็บ ClearDEXTableRows มีการกำหนดไว้ด้านล่าง มีกระบวนงานที่เก็บไว้อีก InsertDEXTableRow ที่แทรกแถวลงใน DEXTable แต่ proc ที่ดูเหมือนจะไม่เกี่ยวข้องในการหยุดชะงักตามรายการในบันทึกข้อผิดพลาด sql DEXTable มีแถวที่อยู่ประมาณ 8.3 ล้านแถวและมีแนวโน้มที่จะเติบโตอย่างต่อเนื่อง ตารางผู้ตอบแบบสอบถามมีขนาดใหญ่และมีแนวโน้มที่จะเติบโตอย่างต่อเนื่อง มันเข้าถึงได้จากเว็บไซต์ปริมาณการใช้งานสูงที่มีหน้าเว็บที่เรียก ClearDEXTableRows และ InsertDEXTableRow บ่อย ๆ อย่างต่อเนื่อง การหยุดชะงักเกิดขึ้นระหว่าง 0 ถึง 9 ครั้งต่อวันในช่วง 10 วันที่ผ่านมา ฉันเปิดใช้งานการติดตาม sql สำหรับ 1222 (โดยใช้ DBCC TRACEON 1222) และเพิ่งเปิดใช้งานการตั้งค่าสถานะ 1204 มีคำอธิบายที่ดีเกี่ยวกับผลลัพธ์สำหรับการตั้งค่าสถานะเหล่านี้ในการตรวจจับและการสิ้นสุด Deadlocks …

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