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

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

6
เมื่อใดที่ฉันควรใช้ข้อ จำกัด ที่ไม่ซ้ำกันแทนที่จะเป็นดัชนีที่ไม่ซ้ำกัน
เมื่อฉันต้องการให้คอลัมน์มีค่าที่แตกต่างฉันสามารถใช้ข้อ จำกัด ได้ create table t1( id int primary key, code varchar(10) unique NULL ); go หรือฉันสามารถใช้ดัชนีเฉพาะ create table t2( id int primary key, code varchar(10) NULL ); go create unique index I_t2 on t2(code); คอลัมน์ที่มีข้อ จำกัด เฉพาะดูเหมือนจะเป็นตัวเลือกที่ดีสำหรับดัชนีเฉพาะ มีเหตุผลใดบ้างที่ทราบว่าใช้ข้อ จำกัด ที่เป็นเอกลักษณ์และไม่ใช้ดัชนีที่ไม่ซ้ำกันแทน

3
PostgreSQL ข้อ จำกัด หลายคอลัมน์ที่ไม่ซ้ำกันและค่าเป็นศูนย์
ฉันมีตารางดังนี้: create table my_table ( id int8 not null, id_A int8 not null, id_B int8 not null, id_C int8 null, constraint pk_my_table primary key (id), constraint u_constrainte unique (id_A, id_B, id_C) ); และฉันต้องการ(id_A, id_B, id_C)ชัดเจนในทุกสถานการณ์ ดังนั้นส่วนแทรกสองรายการต่อไปนี้ต้องส่งผลให้เกิดข้อผิดพลาด: INSERT INTO my_table VALUES (1, 1, 2, NULL); INSERT INTO my_table VALUES (2, 1, …

3
ตรวจสอบข้อ จำกัด เพียงหนึ่งในสามคอลัมน์ที่ไม่ใช่ค่าว่าง
ฉันมีตาราง (SQL Server) ที่มีผลลัพธ์ 3 ประเภท: FLOAT, NVARCHAR (30) หรือ DATETIME (3 คอลัมน์แยกกัน) ฉันต้องการตรวจสอบให้แน่ใจว่าสำหรับแถวใดก็ตามมีเพียงหนึ่งคอลัมน์เท่านั้นที่มีผลลัพธ์และคอลัมน์อื่น ๆ เป็น NULL ข้อ จำกัด การตรวจสอบที่ง่ายที่สุดในการบรรลุสิ่งนี้คืออะไร? บริบทสำหรับสิ่งนี้กำลังพยายามเพิ่มความสามารถในการจับผลลัพธ์ที่ไม่ใช่ตัวเลขลงในระบบที่มีอยู่ การเพิ่มคอลัมน์ใหม่สองคอลัมน์ลงในตารางด้วยข้อ จำกัด เพื่อป้องกันผลลัพธ์มากกว่าหนึ่งรายการต่อแถวเป็นวิธีที่ประหยัดที่สุดไม่จำเป็นต้องเป็นคอลัมน์ที่ถูกต้อง อัปเดต: ขออภัยประเภทข้อมูล snafu น่าเศร้าที่ฉันไม่ได้ตั้งใจชนิดของผลลัพธ์ที่บ่งบอกว่าถูกตีความว่าเป็นประเภทข้อมูล SQL Server เพียงแค่คำศัพท์ทั่วไปได้รับการแก้ไขแล้ว

2
MySQL: วิธีตรวจสอบกุญแจต่างประเทศที่เกี่ยวข้องกับตาราง
จะเห็นกุญแจต่างประเทศที่เกี่ยวข้องกับตารางใน MySql ได้อย่างไร? แบ็คกราวน์ : ฉันต้องการวางตารางใน MySql ซึ่งมีข้อ จำกัด รหัสต่างประเทศ เมื่อฉันทำฉันได้รับสิ่งนี้: Error Code: 1217. Cannot delete or update a parent row: a foreign key constraint fails ฉันจะวางกุญแจต่างประเทศที่เกี่ยวข้องกับตารางจากผู้อื่นได้อย่างไร

2
PostgreSQL EXCLUDE ข้อผิดพลาดในการใช้: จำนวนเต็มชนิดข้อมูลไม่มีคลาสตัวดำเนินการเริ่มต้น
ใน PostgreSQL 9.2.3 ฉันพยายามสร้างตารางที่ง่ายขึ้นนี้: CREATE TABLE test ( user_id INTEGER, startend TSTZRANGE, EXCLUDE USING gist (user_id WITH =, startend WITH &&) ); แต่ฉันได้รับข้อผิดพลาดนี้: ERROR: data type integer has no default operator class for access method "gist" HINT: You must specify an operator class for the index or define a default …

5
เหตุใดข้อ จำกัด UNIQUE จึงอนุญาตให้ NULL เพียงหนึ่งอันเท่านั้น
ในทางเทคนิค NULL = NULL เป็นเท็จโดยตรรกะนั้น NULL จะเท่ากับ NULL ใด ๆ และ NULL ทั้งหมดนั้นแตกต่างกัน นี่ไม่ควรบอกเป็นนัยเลยว่า NULL ทั้งหมดนั้นไม่เหมือนใครและดัชนีที่ไม่ซ้ำกันควรอนุญาตให้มี NULL จำนวนเท่าใด?

7
คัดลอกโครงสร้างที่สมบูรณ์ของตาราง
ใช้วิธีการบางอย่างเมื่อคุณสร้างสำเนาของตารางที่คุณสูญเสียดัชนี, PK, FK เป็นต้นตัวอย่างเช่นใน SQL Server ฉันสามารถพูดได้: select * into dbo.table2 from dbo.table1; นี่เป็นเพียงสำเนาอย่างง่ายของตาราง ดัชนี / ข้อ จำกัด ทั้งหมดหายไป ฉันจะคัดลอกโครงสร้างตาราง (โดยไม่ใช้การสำรองข้อมูล) ได้อย่างไร ฉันกำลังมองหาที่จะทำด้วยตนเองเป็นหลัก แต่ถ้าเป็นไปไม่ได้ที่ฉันจะยอมรับวิธีการแก้ปัญหาใด ๆ

15
วิธีการติดตั้งแฟล็ก 'เริ่มต้น' ที่สามารถตั้งค่าได้ในแถวเดียวเท่านั้น
ตัวอย่างเช่นมีตารางที่คล้ายกับสิ่งนี้: create table foo(bar int identity, chk char(1) check (chk in('Y', 'N'))); มันไม่สำคัญว่าจะมีการนำธงไปใช้เป็นchar(1)a bitหรืออะไรก็ตาม ฉันแค่ต้องการให้สามารถบังคับใช้ข้อ จำกัด ที่สามารถตั้งค่าได้ในแถวเดียวเท่านั้น

2
ฉันจะวางข้อ จำกัด ทั้งหมดจากตารางทั้งหมดได้อย่างไร
ฉันต้องการปล่อยข้อ จำกัด เริ่มต้นทั้งหมดตรวจสอบข้อ จำกัด ข้อ จำกัด เฉพาะคีย์หลักและคีย์ต่างประเทศจากตารางทั้งหมดในฐานข้อมูล SQL Server ฉันรู้วิธีรับชื่อข้อ จำกัด ทั้งหมดsys.objectsแต่ฉันจะเติมALTER TABLEส่วนได้อย่างไร

2
ความแตกต่างระหว่าง MATCH FULL, MATCH SIMPLE และ MATCH PARTIAL?
ฉันสังเกตเห็นMATCH SIMPLEและMATCH FULLแต่ฉันไม่เข้าใจสิ่งที่พวกเขาทำ ฉันเห็นค่าเริ่มต้นคือMATCH SIMPLE; แต่MATCHข้ออื่น ๆในFOREIGN KEYฟังก์ชันข้อ จำกัด ได้อย่างไร

3
ฉันจะบังคับใช้การเขียนครั้งเดียวจากนั้นอ่านตารางฐานข้อมูลเท่านั้นใน SQL ได้อย่างไร
เป็นไปได้ไหม กรณีการใช้งานของฉันคือตารางบัญชีแยกประเภทที่มีข้อกำหนดว่าเมื่อสร้างเรกคอร์ดแล้วควรเป็นแบบอ่านอย่างเดียวนั่นคือไม่มีใครสามารถแก้ไขหรือลบได้ นี้ใช้กับตารางบัญชีแยกประเภทและตารางที่มีความสัมพันธ์โดยตรงกับมัน - มีตารางอื่น ๆ ในสคีมาเดียวกันซึ่งจะมีการปรับปรุง / ลบตามปกติ ความเข้าใจของฉันคือเพื่อความสมบูรณ์ของข้อมูลข้อ จำกัด เหล่านี้ควรนำไปใช้กับเลเยอร์ฐานข้อมูล แต่ฉันไม่สามารถหาวิธีที่สะอาดและเป็นที่ยอมรับในการทำสิ่งนี้ได้ - นี่เป็นกรณีการใช้งานที่ฉันควรจะทำได้ดีกว่า ในชั้นสมัครหรือไม่ อุดมคติจะเป็นวิธีที่จะทำใน SQL ธรรมดาเพื่อให้ไม่เชื่อในสิ่งที่ใช้แพลตฟอร์ม DB เนื่องจากอาจมีการเปลี่ยนแปลง แต่ฉันรู้ว่าอาจจะมากเกินไปที่จะขอดังนั้นถ้ามันมี จะขึ้นอยู่กับแพลตฟอร์มต้องการรสชาติของ MySQL บางอย่าง ขอขอบคุณ!
28 mysql  constraint 

2
'ibfk' หมายถึงอะไรใน MySQL
ถ้าฉันสร้างข้อ จำกัด กุญแจต่างประเทศสำหรับตาราง 'รูปถ่าย' ใน phpmyadmin ภายหลังฉันเห็นว่าข้อ จำกัด ชื่อ 'photos_ibfk_1' และข้อ จำกัด ถัดไปเรียกว่า 'photos_ibfk_2' ฯลฯ จากนี้ฉันได้รวบรวมว่า [tablename] _ibfk_constraintIndex การประชุมสำหรับข้อ จำกัด ของฐานข้อมูลใน MySQL ถูกต้องหรือไม่ IBFK หมายถึงอะไร

3
ข้อ จำกัด ในการบังคับใช้“ อย่างน้อยหนึ่ง” หรือ“ หนึ่งอย่าง” ในฐานข้อมูล
สมมติว่าเรามีผู้ใช้และผู้ใช้แต่ละคนสามารถมีที่อยู่อีเมลได้หลายที่อยู่ CREATE TABLE emails ( user_id integer, email_address text, is_active boolean ) แถวตัวอย่างบางส่วน user_id | email_address | is_active 1 | foo@bar.com | t 1 | baz@bar.com | f 1 | bar@foo.com | f 2 | ccc@ddd.com | t ฉันต้องการบังคับใช้ข้อ จำกัด ที่ผู้ใช้ทุกคนมีที่อยู่หนึ่งที่แน่นอน ฉันจะทำสิ่งนี้ใน Postgres ได้อย่างไร ฉันสามารถทำสิ่งนี้: CREATE UNIQUE INDEX "user_email" ON …

4
ตรวจสอบข้อ จำกัด ไม่ทำงาน?
ฉันมีตารางต่อไปนี้ create table test ( id smallint unsigned AUTO_INCREMENT, age tinyint not null, primary key(id), check (age<20) ); ปัญหาคือCHECKข้อ จำกัด ไม่ทำงานในคอลัมน์อายุ ตัวอย่างเช่นเมื่อฉันใส่ 222 สำหรับเขตข้อมูลอายุ MySQL ยอมรับมัน
23 mysql  constraint 

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

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