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

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

4
ปัญหาความสัมพันธ์ของเอนทิตี
ฉันมี 4 ตารางที่เกี่ยวข้องเช่นนี้ (เป็นตัวอย่าง): Company: ID Name CNPJ Department: ID Name Code ID_Company Classification: ID Name Code ID_Company Workers: Id Name Code ID_Classification ID_Department สมมติว่าผมมีกับclassification id = 20, id_company = 1และdepartmentที่มีid_company = 2(ที่แสดงถึง บริษัท อื่น) สิ่งนี้จะทำให้เกิดการสร้างคนงานที่มาจากสอง บริษัท เนื่องจากการจำแนกประเภทและแผนกเชื่อมโยงกับ บริษัท แยกกัน ฉันไม่ต้องการที่จะเกิดขึ้นดังนั้นฉันคิดว่าฉันมีปัญหากับความสัมพันธ์ของฉันและฉันไม่รู้วิธีแก้ปัญหา

2
ข้อ จำกัด ของคอลัมน์ที่ไม่ซ้ำกันที่กำหนดเองมีผลบังคับใช้เฉพาะถ้าหนึ่งคอลัมน์มีค่าเฉพาะ
เป็นไปได้หรือไม่ที่จะมีข้อ จำกัด คอลัมน์เฉพาะที่กำหนดเองดังต่อไปนี้ สมมติว่าฉันมีสองคอลัมน์subsetและtypeทั้งสองสตริง (แม้ว่าชนิดข้อมูลอาจไม่สำคัญ) ถ้าtypeเป็น "จริง" ฉันก็อยากจะผสมผสานtypeและsubsetเป็นเอกลักษณ์ มิฉะนั้นจะไม่มีข้อ จำกัด ฉันใช้ PostgreSQL 8.4 บนเดเบียน

2
การตรวจสอบข้อ จำกัด การตรวจสอบคืออะไร
ฉันมี T-SQL ที่สร้างขึ้นอัตโนมัติซึ่งน่าจะถูกต้อง แต่ฉันไม่เข้าใจจริงๆ ALTER TABLE [dbo].[MyTable] WITH CHECK CHECK CONSTRAINT [My_FORIEGN_KEY]; ฉันรู้ว่าข้อ จำกัด ของคีย์ต่างประเทศคืออะไร แต่คือCHECK CHECKอะไร

1
ปิดใช้งานข้อ จำกัด ก่อนใช้ pg_restore.exe
เมื่อฉันพยายามเรียกใช้pg_restore.exeงานไฟล์ดัมพ์จากฐานข้อมูลมันก็จะพ่นข้อผิดพลาดออกมาหลายสิบข้อทั้งหมดเหมือนกัน: ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName" เห็นได้ชัดว่าเป็นเพราะความจริงที่ว่าฉันได้ลบฐานข้อมูลก่อนที่จะกู้คืนจากไฟล์การถ่ายโอนข้อมูล (ไฟล์นี้มาจากฐานข้อมูลการผลิต) ... แล้วแน่นอนไม่มีข้อ จำกัด กุญแจต่างประเทศสามารถตกลงถ้าตารางอ้างอิงหนึ่งที่ว่างเปล่า ... มีวิธีปิดใช้งานข้อ จำกัด และคีย์ต่างประเทศทั้งหมดสำหรับตารางทั้งหมดก่อนที่ฉันจะโทรpg_restore.exeและหลังจากนั้นเปิดใช้งานข้อ จำกัด และคีย์ต่างประเทศอีกครั้ง ดังนั้นในการที่ฉันได้พบสิ่งที่น่าสนใจ: ชะลอการ จำกัด การตรวจสอบเพื่อกระทำเวลา แต่ฉันไม่คิดว่าฉันสามารถโทรpg_restore.exeจากภายในได้psql.exeหลังจากชะลอข้อ จำกัด นอกจากนี้ยังมีโพสต์นี้ย้อนหลังไปเมื่อ 10 ปีก่อนแนะนำให้วางแล้วเพิ่มข้อ จำกัด อีกครั้ง หรือเปลี่ยนค่าของ pg_class reltriggers เป็น 0 และนั่นอาจเป็นไปได้สำหรับข้อ จำกัด ... แต่ฉันเกรงว่ามันแฮ็คมากกว่าการฝึกฝนที่ดี ... คุณแนะนำอะไรแนวทางปฏิบัติที่ดีที่สุดในกรณีนี้คืออะไร การใช้pg_dump.exe กับ-cleanแฟล็กจะสร้างดัมพ์ที่ข้ามข้อ จำกัด …

2
ความสัมพันธ์กับคีย์ต่างประเทศแบบมีเงื่อนไข
ขณะนี้ฉันมีรหัสต่างประเทศระหว่างสองหน่วยงานและฉันต้องการสร้างความสัมพันธ์แบบมีเงื่อนไขให้กับประเภทรายการของตารางใดตารางหนึ่ง นี่คือลำดับชั้นของตารางซึ่งทำได้ผ่านการอ้างอิง FK ตั้งแต่เด็กจนถึงผู้ปกครอง Store / \ Employees \ TransactionalStores / | \ Kiosks | BrickMortars Onlines ขณะนี้ฉันมีความสัมพันธ์ FK จากพนักงานเพื่อจัดเก็บ ALTER TABLE Employees ADD CONSTRAINT Employee_Store FOREIGN KEY (TransStoreId) REFERENCES TransactionalStores(StoreId) ฉันต้องการเพิ่มเงื่อนไข: WHERE TransactionalStores.storeType != 'ONLINE_TYPE' เป็นไปได้หรือไม่ฉันต้อง subclass TransactionalStores เป็นสองประเภทย่อยใหม่ (เช่น PhysicalStores และ VirtualStores)

2
SQL Server สามารถสร้างการชนในชื่อข้อ จำกัด ที่ระบบสร้างได้หรือไม่?
ฉันมีแอปพลิเคชั่นที่สร้างตารางเป็นล้านตารางในฐานข้อมูล SQL Server 2008 (ไม่ใช่คลัสเตอร์) ฉันต้องการอัพเกรดเป็น SQL Server 2014 (เป็นกลุ่ม) แต่ฉันพบข้อความแสดงข้อผิดพลาดเมื่อโหลดไม่ครบ: “ มีวัตถุชื่อ 'PK__tablenameprefix__179E2ED8F259C33B' ในฐานข้อมูลอยู่แล้ว " นี่คือชื่อข้อ จำกัด ที่ระบบสร้างขึ้น ดูเหมือนว่าหมายเลข 64 บิตที่สร้างแบบสุ่ม เป็นไปได้ไหมที่ฉันเห็นการชนเนื่องจากตารางจำนวนมาก? สมมติว่าฉันมี 100 ล้านตารางฉันคำนวณโอกาสน้อยกว่า 1 ใน 1 ล้านล้านของการชนกันเมื่อเพิ่มตารางถัดไป แต่ถือว่าเป็นการกระจายแบบสม่ำเสมอ เป็นไปได้หรือไม่ที่ SQL Server เปลี่ยนอัลกอริธึมการสร้างชื่อระหว่างเวอร์ชั่น 2008 และ 2014 เพื่อเพิ่มโอกาสในการชน? ความแตกต่างที่สำคัญอื่น ๆ คืออินสแตนซ์ 2014 ของฉันเป็นคู่แบบคลัสเตอร์ แต่ฉันกำลังพยายามตั้งสมมติฐานเพื่อหาสาเหตุที่ทำให้เกิดข้อผิดพลาดด้านบน ป.ล. ใช่ฉันรู้ว่าการสร้างตารางนับล้านนั้นเสียสติ นี่คือรหัสสีดำของบุคคลที่สามซึ่งฉันไม่สามารถควบคุมได้ แม้จะมีความวิกลจริต แต่ก็ใช้งานได้ในเวอร์ชัน …

2
ข้อ จำกัด - หนึ่งแถวบูลีนเป็นจริงแถวอื่นทั้งหมดเป็นเท็จ
ฉันมีคอลัมน์: standard BOOLEAN NOT NULL ฉันต้องการบังคับใช้หนึ่งแถวจริงและอื่น ๆ ทั้งหมดเป็นเท็จ ไม่มีของ FK หรือสิ่งอื่นใดขึ้นอยู่กับข้อ จำกัด นี้ ฉันรู้ว่าฉันสามารถทำได้ด้วย plpgsql แต่ดูเหมือนว่าค้อนขนาดใหญ่ ฉันต้องการบางสิ่งบางอย่างเช่นCHECKหรือUNIQUEข้อ จำกัด ง่ายกว่าดีกว่า แถวหนึ่งต้องเป็นจริงพวกเขาไม่สามารถเป็นเท็จได้ทั้งหมด (ดังนั้นแถวแรกที่แทรกจะต้องเป็นจริง) แถวจะต้องได้รับการอัปเดตซึ่งหมายความว่าฉันต้องรอตรวจสอบข้อ จำกัด จนกว่าการอัปเดตจะเสร็จสิ้นเนื่องจากแถวทั้งหมดอาจถูกตั้งค่าเป็นเท็จก่อนและหนึ่งแถวจริงหลังจากนั้น มี FK ระหว่างproducts.tax_rate_idและtax_rate.idแต่ไม่มีอะไรเกี่ยวข้องกับอัตราภาษีเริ่มต้นหรือมาตรฐานซึ่งผู้ใช้สามารถเลือกเพื่อสร้างผลิตภัณฑ์ใหม่ได้อย่างง่ายดาย .. PostgreSQL 9.5 ถ้าเป็นเรื่องสำคัญ พื้นหลัง ตารางคืออัตราภาษี อัตราภาษีอย่างใดอย่างหนึ่งคือค่าเริ่มต้น ( standardเนื่องจากค่าเริ่มต้นคือคำสั่ง Postgres) เมื่อมีการเพิ่มผลิตภัณฑ์ใหม่อัตราภาษีมาตรฐานจะถูกนำไปใช้กับผลิตภัณฑ์ หากไม่มีstandardอยู่ฐานข้อมูลต้องทำการเดาหรือเช็คที่ไม่จำเป็นทุกชนิด standardทางออกที่ง่ายผมคิดว่าคือการทำให้แน่ใจว่ามี ตามค่าเริ่มต้น "" ด้านบนฉันหมายถึงเลเยอร์การนำเสนอ (UI) มีตัวเลือกผู้ใช้สำหรับการเปลี่ยนแปลงอัตราภาษีเริ่มต้น ฉันต้องเพิ่มการตรวจสอบพิเศษเพื่อให้แน่ใจว่า GUI / ผู้ใช้ไม่พยายามตั้งค่า tax_rate_id …

4
ปล่อยข้อ จำกัด (ดัชนี) บนคอลัมน์
ฉันจะแก้ไขประเภทในตารางที่มีดัชนีอยู่ได้อย่างไร ฉันพยายามที่จะแก้ไขคอลัมน์ในตารางว่างเปล่าเพื่อแก้ไขประเภทจากวันที่เป็น varchar (15) และมีข้อผิดพลาดที่บอกว่ามีการพึ่งพาคอลัมน์ (ซึ่งกลายเป็นดัชนี) ฉันสามารถไปที่จุดนี้ได้อย่างง่ายดายด้วยการคลิกขวาที่ดัชนีและวางสคริปต์ แต่ฉันจำเป็นต้องทำสิ่งนี้บนเซิร์ฟเวอร์อื่น ๆ ที่ฉันจะไม่สามารถเข้าถึงชื่อดัชนีได้ มีวิธีที่ฉันสามารถสร้างสคริปต์ที่จะวางดัชนีใด ๆ ให้ฉันทำประเภทข้อมูลที่เปลี่ยนแปลงในคอลัมน์แล้วอ่านดัชนีหรือไม่ ขอบคุณ!

2
ข้อ จำกัด ที่ไม่ซ้ำกันในคอลัมน์ Nullable ใน SQL Server 2005
ในโครงการหนึ่งที่ฉันกำลังดำเนินการอยู่ฉันต้องตั้งค่าเขตข้อมูลเฉพาะให้ไม่ซ้ำกัน (ไม่ใช่ปัญหา!) แต่ถ้าเขตข้อมูลเป็นโมฆะฉันต้องการให้ข้อ จำกัด ถูกละเว้น ใน SQL Server 2008 ฉันใช้ดัชนีตัวกรองตามที่แสดงด้านล่าง แต่ไม่มีใน SQL เวอร์ชันก่อนหน้านี้! CREATE UNIQUE NONCLUSTERED INDEX User_UserName_IUC ON [User] (pinNr) WHERE UserName IS NOT NULL แต่ฉันไม่คิดว่ามันมีอยู่ใน SQL Server 2005 จริงๆแล้วโพสต์บล็อกนี้ระบุว่ามีวิธีแก้ไขปัญหาโดยใช้ทริกเกอร์เพื่อตรวจสอบความไม่ซ้ำ ใครบ้างมีตัวอย่างของสิ่งนี้? หรืออาจเป็นทางเลือก? น่าเสียดายที่การอัปเกรดเป็น SQl Server 2008 ไม่ใช่ตัวเลือกสำหรับลูกค้ารายนี้ !!

3
วิธีเพิ่มข้อ จำกัด เริ่มต้นขณะสร้างตาราง SQL Server [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับผู้ดูแลฐานข้อมูล Exchange Exchange ปิดให้บริการใน3 ปีที่ผ่านมา ฉันพยายามสร้างตารางใหม่ที่มีคอลัมน์ตามด้วยข้อ จำกัด ดังที่แสดงด้านล่าง Create tblTest( columns.. .. .. Gender int, Constraint DF_tblTest_Gender Default 3 For Gender, .. .. .. ) อย่างไรก็ตามฉันได้รับข้อความแสดงข้อผิดพลาดใกล้กับข้อ จำกัด เริ่มต้นว่า 'ใกล้ไวยากรณ์ที่ไม่ถูกต้อง' สำหรับ ''

1
จำกัด อินพุตให้กับสตริงที่ต่างกันเล็กน้อย
สวัสดีฉันไม่สามารถรับข้อ จำกัด ในการทำงานตามที่ฉันคาดหวังใน postgreSQL จากภายใน pgadmin ฉันรันเคียวรี SQL ต่อไปนี้ -- Check: "TypeCheck" -- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck"; ALTER TABLE "ComLog" ADD CONSTRAINT "TypeCheck" CHECK ("Type" SIMILAR TO 'email|post|IRL|minutes'); COMMENT ON CONSTRAINT "TypeCheck" ON "ComLog" IS 'One of email|post|IRL|minutes'; เมื่อดำเนินการนี้จะถูกแปลงเป็น -- Check: "TypeCheck" -- ALTER TABLE "ComLog" DROP CONSTRAINT …

1
ตรวจสอบข้อ จำกัด ในการบังคับใช้ ###. ###. #### จับคู่รูปแบบ
ฉันต้องการตรวจสอบข้อ จำกัด ที่บังคับใช้รูปแบบ regex นี้สำหรับรหัสหลายส่วน: ^\d{3}\.\d{3}\.\d{4}$ ... สามตัวเลข, จุด, สามตัวเลข, จุด, สี่ตัวเลข ฉันต้องสร้างฟังก์ชัน CLR เพื่อบังคับใช้การจับคู่รูปแบบหรือไม่และสามารถอ้างอิงฟังก์ชัน CLR ใน DDL ได้หรือไม่ มีวิธีในการบังคับใช้รูปแบบในอีกทางหนึ่งโดยใช้LIKEหรือไม่

5
เหตุใดการอัปเดตนี้จึงล้มเหลวเนื่องจากมีการละเมิดข้อ จำกัด คีย์ที่ไม่ซ้ำกัน
ฉันเป็น DBA "บังเอิญ" ซึ่งค่อนข้างไม่มีประสบการณ์และรู้สึกงุนงงกับปัญหานี้ ใช้ MS SQL Server 2012 ปัญหานี้เกิดขึ้นกับคำสั่ง UPDATE นี้: UPDATE dbo.tAccts SET Ticket = 'ARP.ExGE' , Method = 'smtp' , AcctOwner = 'r00417819' , DisplayName = '~AppLight HBSFax-Inactive' , Destination = 'r00417819@mail.ad.ge.com' , UpdatedBy = SYSTEM_USER , UpdatedOn = CAST(GetDate() AS DATE) FROM dbo.vReclaimable WHERE OHR_EmpStatus <> …

2
ปัญหาการละเมิดข้อ จำกัด กุญแจต่างประเทศ
ฉันได้ระบุ 3 สถานการณ์ นักเรียนที่ไม่มีการลงทะเบียน นักเรียนที่มีการลงทะเบียน แต่ไม่มีเกรด นักเรียนที่มีการลงทะเบียนและผลการเรียน มีทริกเกอร์ในตารางการลงทะเบียนเพื่อคำนวณเกรดเฉลี่ย หากนักเรียนมีคะแนนจะทำการอัปเดตหรือแทรกรายการลงในตารางเกรดเฉลี่ย ไม่มีเกรดไม่มีรายการตารางเกรดเฉลี่ย ฉันสามารถลบนักเรียนที่ไม่มีการลงทะเบียน (# 1) ฉันสามารถลบนักเรียนที่มีการลงทะเบียนและผลการเรียน (# 3 ด้านบน) แต่ฉันไม่สามารถลบนักเรียนที่มีการลงทะเบียน แต่ไม่มีคะแนน (# 2) ฉันได้รับการละเมิดข้อ จำกัด ในการอ้างอิง คำสั่ง DELETE ขัดแย้งกับข้อ จำกัด การอ้างอิง "FK_dbo.GPA_dbo.Student_StudentID" ความขัดแย้งเกิดขึ้นในฐานข้อมูล "", ตาราง "dbo.GPA", คอลัมน์ 'StudentID' หากฉันไม่สามารถลบนักเรียนใหม่ที่ไม่มีการลงทะเบียน (และไม่มีรายการ GPA) ฉันจะเข้าใจการละเมิดข้อ จำกัด แต่ฉันสามารถลบนักเรียนคนนั้นได้ เป็นนักเรียนที่มีการลงทะเบียนและไม่มีคะแนน (และยังไม่มีรายการเกรดเฉลี่ย) ที่ฉันไม่สามารถลบได้ ฉันได้ติดตั้งทริกเกอร์ของฉันเพื่อให้สามารถไปข้างหน้า ทีนี้ถ้าคุณมีการลงทะเบียนทริกเกอร์จะแทรกคุณลงในตารางเกรดเฉลี่ยไม่ว่าจะเกิดอะไรขึ้น แต่ฉันไม่เข้าใจปัญหาพื้นฐาน คำอธิบายใด ๆ …

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

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