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

ชนิดของข้อ จำกัด ด้านความสมบูรณ์ที่ใช้ในแพลตฟอร์ม RDBMS เพื่อให้แน่ใจว่าค่าในคอลัมน์ตรงกับช่วงหนึ่งของค่าคีย์จากตารางอื่น

5
คำอธิบายที่ดีเกี่ยวกับพฤติกรรมแบบเรียงซ้อน (ON DELETE / UPDATE)
ฉันไม่ได้ออกแบบสกีมาทุกวัน แต่เมื่อฉันทำฉันพยายามตั้งค่าการปรับปรุง / ลบทั้งหมดอย่างถูกต้องเพื่อให้การจัดการง่ายขึ้น ฉันเข้าใจว่าน้ำตกมีประโยชน์อย่างไร แต่ฉันจำไม่ได้ว่าตารางใดอยู่ ตัวอย่างเช่นถ้าฉันมีสองตาราง - ParentและChild- มีคีย์ต่างประเทศในChildการอ้างอิงนั้นParentและมีON DELETE CASCADEบันทึกใดที่ทำให้เกิดน้ำตกและบันทึกใดถูกลบโดยน้ำตก? การเดาครั้งแรกของฉันจะเป็นChildระเบียนที่ถูกลบเมื่อParentบันทึกถูกลบเนื่องจากChildระเบียนขึ้นอยู่กับParentระเบียน แต่สิ่งที่ON DELETEคลุมเครือนั้น มันอาจหมายถึงลบParentบันทึกเมื่อChildบันทึกถูกลบหรืออาจหมายถึงลบChildบันทึกเมื่อParentถูกลบ แล้วมันคืออะไร? ฉันหวังว่าไวยากรณ์เป็นON PARENT DELETE, CASCADE, ON FOREIGN DELETE, CASCADEหรือสิ่งที่คล้ายกันในการลบความคลุมเครือ ใครบ้างมีความจำในการจดจำสิ่งนี้?

3
ฉันจะแทรกแถวซึ่งมีรหัสต่างประเทศได้อย่างไร
ใช้ PostgreSQL v9.1 ฉันมีตารางต่อไปนี้: CREATE TABLE foo ( id BIGSERIAL NOT NULL UNIQUE PRIMARY KEY, type VARCHAR(60) NOT NULL UNIQUE ); CREATE TABLE bar ( id BIGSERIAL NOT NULL UNIQUE PRIMARY KEY, description VARCHAR(40) NOT NULL UNIQUE, foo_id BIGINT NOT NULL REFERENCES foo ON DELETE RESTRICT ); สมมติว่าตารางแรกfooมีข้อมูลประชากรเช่นนี้: INSERT INTO …

3
ความแตกต่างระหว่าง On Delete Cascade และ On Cascade Update ใน mysql
ฉันมีสองตารางใน MySQL database- ,parent childฉันกำลังพยายามเพิ่มการอ้างอิงคีย์ต่างประเทศในตารางลูกของฉันตามตารางหลัก มีความแตกต่างที่สำคัญระหว่างON UPDATE CASCADEและON DELETE CASCADE ตารางผู้ปกครองของฉัน CREATE TABLE parent ( id INT NOT NULL, PRIMARY KEY (id) ) ENGINE=INNODB; คำถามของฉันคืออะไรความแตกต่างระหว่างการค้นหา sql ต่อไปนี้คืออะไร ON DELETE CASCADE CREATE TABLE child ( id INT, parent_id INT, INDEX par_ind (parent_id), FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE ) …

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

3
การใช้คีย์ต่างประเทศหลายอันคั่นด้วยเครื่องหมายจุลภาคผิดหรือไม่และถ้าใช่ทำไม
มีสองตาราง: และDeal DealCategoriesดีลหนึ่งสามารถมีได้หลายประเภทดีล ดังนั้นวิธีที่เหมาะสมควรทำตารางที่DealCategoriesมีโครงสร้างดังนี้ DealCategoryId (PK) DealId (FK) DealCategoryId (FK) อย่างไรก็ตามทีมงานภายนอกของเราเก็บหลายหมวดหมู่ไว้ใน Dealตารางด้วยวิธีนี้: DealId (PK) DealCategory -- In here they store multiple deal ids separated by commas like this: 18,25,32. ฉันรู้สึกว่าสิ่งที่พวกเขาทำผิด แต่ฉันไม่รู้วิธีอธิบายอย่างชัดเจนว่าทำไมสิ่งนี้ไม่ถูกต้อง ฉันจะอธิบายให้พวกเขาฟังได้อย่างไรว่าสิ่งนี้ผิด หรือบางทีฉันเป็นคนที่ผิดและเป็นที่ยอมรับ?

1
ต้องการดัชนีสำหรับคีย์ต่างประเทศ
ฉันกำลังดิ้นรนกับดัชนีคีย์หลักและคีย์ต่างประเทศ ... และความต้องการของพวกเขาทั้งหมด ถ้าฉันมีสองตารางทั้งสองจะมีจำนวนเต็มเป็นคีย์หลัก ตารางแรกอ้างอิงผ่าน FK ไปยังคีย์หลักของตารางที่สอง ในตารางทั้งสองฉันมีดัชนีคีย์หลักในคอลัมน์ ID ฉันสร้างข้อ จำกัด FK ในการtable1.ref_fieldอ้างอิง PK ของตารางที่สอง ( table2.id) และฉันเพิ่มดัชนีบน table1.ref_field นี่เป็นวิธีที่ดีที่สุดในการจัดระเบียบดัชนีคีย์หลักและคีย์ต่างประเทศหรือไม่

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

3
เป็นที่ยอมรับได้หรือไม่ที่จะมีการอ้างอิงคีย์ต่างประเทศแบบวงกลม \ จะหลีกเลี่ยงได้อย่างไร?
เป็นที่ยอมรับหรือไม่ที่จะมีการอ้างอิงแบบวงกลมระหว่างสองตารางในเขตข้อมูล foreign key? หากไม่สามารถหลีกเลี่ยงสถานการณ์เหล่านี้ได้อย่างไร ถ้าเป็นเช่นนั้นข้อมูลจะถูกแทรกได้อย่างไร? ด้านล่างเป็นตัวอย่างของที่ (ในความคิดของฉัน) อ้างอิงวงกลมจะยอมรับได้: CREATE TABLE Account ( ID INT PRIMARY KEY IDENTITY, Name VARCHAR(50) ) CREATE TABLE Contact ( ID INT PRIMARY KEY IDENTITY, Name VARCHAR(50), AccountID INT FOREIGN KEY REFERENCES Account(ID) ) ALTER TABLE Account ADD PrimaryContactID INT FOREIGN KEY REFERENCES Contact(ID)

2
"ดัชนีการจับคู่บางส่วน" คืออะไร
ฉันกำลังพยายามเรียนรู้เพิ่มเติมเกี่ยวกับตัวดำเนินการแบบสอบถาม "การอ้างอิงต่างประเทศ" ที่แนะนำใน SQL Server 2016 มีข้อมูลไม่มากนัก Microsoft ประกาศมันนี่และฉัน blogged เกี่ยวกับเรื่องนี้ที่นี่ ผู้ประกอบการใหม่สามารถมองเห็นได้โดยการลบแถวจากตารางผู้ปกครองที่มี 254 หรือเข้ามาเพิ่มเติมอ้างอิงที่สำคัญต่างประเทศ: การเชื่อมโยง dbfiddle มีจำนวนการนับที่แตกต่างกันสามรายการที่แสดงในรายละเอียดผู้ประกอบการ การอ้างอิงคีย์ต่างประเทศนับเป็นจำนวนของคีย์ต่างประเทศที่เข้ามา ไม่มีการนับดัชนีที่ตรงกันคือจำนวนกุญแจต่างประเทศที่เข้ามาโดยไม่มีดัชนีที่เหมาะสม การตรวจสอบว่าตารางที่อัปเดตหรือถูกลบจะไม่ละเมิดข้อ จำกัด ดังกล่าวจะต้องสแกนตารางลูก ฉันไม่รู้ว่าการจับคู่ดัชนีบางส่วนหมายถึงอะไร ดัชนีการจับคู่บางส่วนในบริบทนี้คืออะไร ฉันไม่สามารถทำงานต่อไปนี้ได้: ดัชนีที่กรองแล้ว การวางคอลัมน์คีย์ต่างประเทศเป็นINCLUDEคอลัมน์สำหรับดัชนี สร้างดัชนีด้วยคอลัมน์ foreign key เป็นคอลัมน์ key ที่สอง ดัชนีคอลัมน์เดี่ยวสำหรับปุ่มต่างประเทศหลายคอลัมน์ การสร้างดัชนีครอบคลุมหลายรายการเพื่อเปิดใช้งานแผน "เข้าร่วมดัชนี" สำหรับคีย์ต่างประเทศหลายคอลัมน์ Dan Guzmanชี้ให้เห็นว่าคีย์ต่างประเทศหลายคอลัมน์สามารถจับคู่ดัชนีแม้ว่าคีย์ดัชนีจะอยู่ในลำดับที่แตกต่างจากคอลัมน์คีย์ต่างประเทศ รหัสของเขาอยู่ที่นี่ในกรณีที่มีคนสามารถใช้เป็นจุดเริ่มต้นเพื่อหาข้อมูลเพิ่มเติมเกี่ยวกับดัชนีการจับคู่บางส่วน

2
วิธีการเขียนแบบสอบถามที่ค้นหาการอ้างอิงแบบวงกลมทั้งหมดเมื่อตารางอ้างอิงตัวเอง?
ฉันมีสคีมาต่อไปนี้ (เปลี่ยนชื่อ) ซึ่งฉันไม่สามารถเปลี่ยนแปลงได้: CREATE TABLE MyTable ( Id INT NOT NULL PRIMARY KEY, ParentId INT NOT NULL ); ALTER TABLE MyTable ADD FOREIGN KEY (ParentId) REFERENCES MyTable(Id); นั่นคือแต่ละระเบียนเป็นลูกของบันทึกอื่น หากเร็กคอร์ดของParentIdเท่ากับIdเร็กคอร์ดนั้นจะถือว่าเป็นโหนดรูท ฉันต้องการเรียกใช้แบบสอบถามซึ่งจะค้นหาการอ้างอิงแบบวงกลมทั้งหมด ตัวอย่างเช่นกับข้อมูล INSERT INTO MyTable (Id, ParentId) VALUES (0, 0), (1, 0), (2, 4), (3, 2), (4, 3); แบบสอบถามควรกลับมา Id | …

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

3
จะมีความสัมพันธ์แบบตัวต่อตัวกับเด็กที่มีสิทธิพิเศษอย่างไร
ฉันต้องการที่จะมีความสัมพันธ์แบบหนึ่งต่อหลายคนซึ่งสำหรับผู้ปกครองแต่ละคนเด็กหนึ่งหรือศูนย์ถูกทำเครื่องหมายเป็น "รายการโปรด" อย่างไรก็ตามผู้ปกครองทุกคนจะไม่มีลูก (นึกถึงผู้ปกครองว่าเป็นคำถามในไซต์นี้เด็ก ๆ เป็นคำตอบและชอบเป็นคำตอบที่ยอมรับ) ตัวอย่างเช่น TableA Id INT PRIMARY KEY TableB Id INT PRIMARY KEY Parent INT NOT NULL FOREIGN KEY REFERENCES TableA.Id วิธีที่ฉันเห็นฉันสามารถเพิ่มคอลัมน์ต่อไปนี้ใน TableA: FavoriteChild INT NULL FOREIGN KEY REFERENCES TableB.Id หรือคอลัมน์ต่อไปนี้เพื่อ TableB: IsFavorite BIT NOT NULL ปัญหาเกี่ยวกับวิธีแรกคือมันแนะนำคีย์ต่างประเทศที่ไม่มีค่าซึ่งฉันเข้าใจว่าไม่ได้อยู่ในรูปแบบปกติ ปัญหาเกี่ยวกับแนวทางที่สองคือต้องทำงานมากกว่านี้เพื่อให้แน่ใจว่าเด็กส่วนใหญ่จะเป็นคนโปรด เกณฑ์ประเภทใดที่ฉันควรใช้เพื่อกำหนดวิธีการที่จะใช้ หรือมีวิธีอื่นที่ฉันไม่ได้พิจารณาหรือไม่? ฉันใช้ SQL Server 2012

5
มี DBMS ที่อนุญาตให้ใช้ Foreign Key ที่อ้างอิงมุมมอง (และไม่เพียง แต่ตารางพื้นฐาน)?
แรงบันดาลใจจากการสร้างแบบจำลองคำถาม Django: การสร้างแบบจำลองฐานข้อมูลที่มีความสัมพันธ์หลายต่อหลายหลายใน Django การออกแบบ db เป็นสิ่งที่ชอบ: CREATE TABLE Book ( BookID INT NOT NULL , BookTitle VARCHAR(200) NOT NULL , PRIMARY KEY (BookID) ) ; CREATE TABLE Tag ( TagID INT NOT NULL , TagName VARCHAR(50) NOT NULL , PRIMARY KEY (TagID) ) ; CREATE TABLE BookTag ( BookID …

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


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