คำถามติดแท็ก unique-constraint

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

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

4
คอลัมน์ NVARCHAR เป็นคีย์หลักหรือคอลัมน์ที่ไม่ซ้ำกัน
ฉันกำลังพัฒนาฐานข้อมูล SQL Server 2012 และฉันมีข้อสงสัยเกี่ยวกับคอลัมน์ nvarchar เป็นคีย์หลัก ฉันมีตารางนี้: CREATE TABLE [dbo].[CODES] ( [ID_CODE] [bigint] IDENTITY(1,1) NOT NULL, [CODE_LEVEL] [tinyint] NOT NULL, [CODE] [nvarchar](20) NOT NULL, [FLAG] [tinyint] NOT NULL, [IS_TRANSMITTED] [bit] NOT NULL DEFAULT 0, CONSTRAINT [PK_CODES] PRIMARY KEY CLUSTERED ( [CODE_LEVEL] ASC, [CODE] ASC ) ) แต่ตอนนี้ฉันต้องการใช้[CODE]คอลัมน์เป็นคีย์หลักและลบ[ID_CODE]คอลัมน์ มีปัญหาหรือบทลงโทษหรือไม่หากฉันมีNVARCHARคอลัมน์เป็นPRIMARY KEY? …

1
การสร้างข้อ จำกัด ที่ไม่ซ้ำกันในคอลัมน์ Postgres ลบความจำเป็นในการจัดทำดัชนีหรือไม่
การสร้างข้อ จำกัด ที่ไม่ซ้ำกันในคอลัมน์ Postgres ลบความจำเป็นในการจัดทำดัชนีหรือไม่ ฉันคาดหวังว่าดัชนีจำเป็นสำหรับการรักษาข้อ จำกัด ได้อย่างมีประสิทธิภาพโดยอัตโนมัติ

4
การพิจารณาประสิทธิภาพระหว่างการใช้ PK แบบกว้างเทียบกับคีย์สังเคราะห์แบบแยกต่างหากกับ UQ คืออะไร
ฉันมีตารางหลายตารางที่สามารถระบุระเบียนได้โดยไม่ซ้ำกับสาขาธุรกิจที่หลากหลาย ก่อนหน้านี้ฉันใช้ฟิลด์เหล่านี้เป็น PK โดยคำนึงถึงประโยชน์เหล่านี้: เรียบง่าย; ไม่มีฟิลด์ที่ไม่เกี่ยวข้องและมีเพียงหนึ่งดัชนี การทำคลัสเตอร์ช่วยให้สามารถผสานการรวมอย่างรวดเร็วและตัวกรองตามช่วง อย่างไรก็ตามฉันได้ยินกรณีที่ทำเพื่อสร้างIDENTITY INTPK สังเคราะห์และบังคับใช้รหัสธุรกิจด้วยUNIQUEข้อ จำกัดแยกต่างหาก ข้อดีคือการที่ PK แคบทำให้ดัชนีรองมีขนาดเล็กกว่ามาก ถ้าตารางมีไม่มีดัชนีอื่น ๆ กว่า PK ผมไม่เห็นเหตุผลที่จะสนับสนุนแนวทางที่สองใด ๆ แม้ว่าจะอยู่ในตารางขนาดใหญ่ก็อาจดีที่สุดที่จะสรุปว่าดัชนีอาจมีความจำเป็นในอนาคตและดังนั้นจึงชอบ PK สังเคราะห์แคบ . ฉันขาดการพิจารณาใด ๆ หรือไม่? อนึ่งฉันไม่ได้โต้เถียงกับการใช้คีย์สังเคราะห์ในคลังข้อมูลฉันแค่สนใจว่าจะใช้ PK แบบกว้าง ๆ เพียงครั้งเดียวและเมื่อใดที่จะใช้ PK แบบแคบและอังกฤษแบบกว้าง

3
การทำให้ฟิลด์เป็นเอกเทศทำให้เป็นดัชนีหรือไม่?
หากฉันสร้างuniqueข้อ จำกัด ในฟิลด์ฉันต้องสร้างดัชนีบนฟิลด์นั้นเพื่อให้ได้เวลาแทรกที่ปรับขนาดได้หรือไม่ หรือจะทำเพื่อฉัน (แม้ว่าดัชนีที่ใช้ไม่สามารถเข้าถึงได้แบบสาธารณะ) โดยเฉพาะฉันทำงานกับ Apache Derby สำหรับการสร้างต้นแบบแม้ว่าฉันอาจจะย้ายไปยัง MySQL ในอนาคตอันใกล้ ฉันก็หวังว่าอาจมีบางอย่างในมาตรฐาน SQL ที่บอกอะไรบางอย่างเกี่ยวกับเรื่องนี้ ฉันไม่จำเป็นต้องค้นหาตามฟิลด์นี้ดังนั้นฉันจึงไม่ต้องการสร้างดัชนีที่ไร้ประโยชน์ แต่ฉันอยากจะมีดัชนีที่ไร้ประโยชน์มากกว่ามีO(n)เวลาแทรก

2
ทำไมคีย์ต่างประเทศแบบคอมโพสิตจึงจำเป็นต้องมีข้อ จำกัด ที่ไม่เหมือนกัน?
นี่คือตารางอย่างง่าย ๆ ที่เรคคอร์ดอาจอ้างอิงเรคคอร์ดหลักในตารางเดียวกัน: CREATE TABLE foo ( id SERIAL PRIMARY KEY, parent_id INT NULL, num INT NOT NULL, txt TEXT NULL, FOREIGN KEY (parent_id) REFERENCES foo(id) ); ด้วยข้อกำหนดเพิ่มเติมที่หนึ่งในค่าเขตข้อมูลอื่น ( num) จะต้องเหมือนกันระหว่างบันทึกผู้ปกครองและเด็กฉันคิดว่าคีย์ต่างประเทศประกอบควรทำเคล็ดลับ ฉันเปลี่ยนบรรทัดสุดท้ายเป็น FOREIGN KEY (parent_id, num) REFERENCES foo(id, num) และมีข้อผิดพลาด: ไม่มีข้อ จำกัด ที่ไม่ซ้ำกันการจับคู่ปุ่มรับสำหรับตารางการอ้างอิง "foo" ฉันสามารถเพิ่มข้อ จำกัด นี้ได้อย่างง่ายดาย แต่ฉันไม่เข้าใจว่าทำไมจึงมีความจำเป็นเมื่อหนึ่งในคอลัมน์ที่อ้างอิง ( id) …

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