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

กลไกการประกาศเช่นเช็คหรือคีย์ต่างประเทศที่บังคับใช้กฎความสมบูรณ์ของข้อมูลในฐานข้อมูล

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) …

6
ตารางที่มีลำดับชั้น: สร้างข้อ จำกัด เพื่อป้องกันการเวียนผ่านปุ่มต่างประเทศ
สมมติว่าเรามีตารางที่มีข้อ จำกัด foreign key กับตัวเองเช่น: CREATE TABLE Foo (FooId BIGINT PRIMARY KEY, ParentFooId BIGINT, FOREIGN KEY([ParentFooId]) REFERENCES Foo ([FooId]) ) INSERT INTO Foo (FooId, ParentFooId) VALUES (1, NULL), (2, 1), (3, 2) UPDATE Foo SET ParentFooId = 3 WHERE FooId = 1 ตารางนี้จะมีบันทึกต่อไปนี้: FooId ParentFooId ----- ----------- 1 3 2 …

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 ที่ไม่ซ้ำกัน …

2
ฉันจะช่วย SQL Server ให้รู้ได้อย่างไรว่าคอลัมน์มุมมองที่จัดทำดัชนีของฉันไม่เป็น NULL
ฉันมีมุมมองการจัดทำดัชนีต่อไปนี้กำหนดไว้ใน SQL Server 2008 (คุณสามารถดาวน์โหลด schema การทำงานจากส่วนสำคัญสำหรับการทดสอบ): CREATE VIEW dbo.balances WITH SCHEMABINDING AS SELECT user_id , currency_id , SUM(transaction_amount) AS balance_amount , COUNT_BIG(*) AS transaction_count FROM dbo.transactions GROUP BY user_id , currency_id ; GO CREATE UNIQUE CLUSTERED INDEX UQ_balances_user_id_currency_id ON dbo.balances ( user_id , currency_id ); GO user_id, currency_idและtransaction_amountมีการกำหนดไว้ทั้งหมดเป็นคอลัมน์ในNOT NULL …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.