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

กุญแจต่างประเทศเป็นคุณสมบัติด้านความสมบูรณ์ของข้อมูลของฐานข้อมูลเชิงสัมพันธ์ (และ SQL) foreign key คือชุดของแอ็ตทริบิวต์ในตารางเชิงสัมพันธ์ที่อยู่ภายใต้ข้อ จำกัด ของ Referential integrity ข้อ จำกัด ของ Referential Integrity นั้นค่าของแอตทริบิวต์ foreign key ในตารางหนึ่งต้องตรงกับค่าที่เกี่ยวข้องในตาราง B ที่ระบุ (ซึ่งบางครั้งอาจเป็นตารางเดียวกันกับ A)

16
ข้อ จำกัด foreign key สามารถปิดใช้งานชั่วคราวโดยใช้ T-SQL ได้อย่างไร
การปิดใช้งานและการเปิดใช้งานข้อ จำกัด คีย์ต่างประเทศรองรับใน SQL Server หรือไม่ หรือจะเป็นตัวเลือกเดียวของฉันไปdropแล้วอีกcreateข้อ จำกัด ?

12
วิธีตัดทอนตาราง foreign foreign ที่มีข้อ จำกัด
ทำไมไม่ตัดในmygroupการทำงาน? แม้ว่าฉันจะON DELETE CASCADE SETได้รับ: ข้อผิดพลาด 1701 (42000): ไม่สามารถตัดทอนตารางอ้างอิงในข้อ จำกัด ที่สำคัญต่างประเทศ ( mytest. instanceข้อ จำกัดinstance_ibfk_1ต่างประเทศ (Key GroupID) อ้างอิงmytest. mygroup( ID)) drop database mytest; create database mytest; use mytest; CREATE TABLE mygroup ( ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ) ENGINE=InnoDB; CREATE TABLE instance ( ID INT NOT NULL AUTO_INCREMENT …

11
ฉันจะดูกุญแจต่างประเทศทั้งหมดในตารางหรือคอลัมน์ได้อย่างไร
ใน MySQL ฉันจะรับรายการข้อ จำกัด คีย์ต่างประเทศทั้งหมดที่ชี้ไปยังตารางที่ระบุได้อย่างไร คอลัมน์ใดคอลัมน์หนึ่ง นี่คือสิ่งเดียวกันกับคำถาม Oracle นี้แต่สำหรับ MySQL

28
ไม่สามารถตัดทอนตารางได้เนื่องจากมีการอ้างอิงโดยข้อ จำกัด ของคีย์ต่างประเทศหรือไม่
การใช้ MSSQL2005 ฉันสามารถตัดทอนตารางด้วยข้อ จำกัด foreign key ได้หรือไม่ถ้าฉันตัดทอนตารางลูก (ตารางที่มีคีย์หลักของความสัมพันธ์ FK) เป็นอันดับแรก ฉันรู้ว่าฉันสามารถ ใช้DELETEคำสั่งที่ไม่มีตำแหน่งและจากนั้นจึงRESEEDระบุตัวตน ลบ FK ตัดทอนตารางและสร้าง FK ใหม่ ฉันคิดว่าตราบใดที่ฉันตัดทอนตารางลูกต่อหน้าพ่อแม่ฉันก็โอเคโดยไม่ทำตามตัวเลือกข้างต้น แต่ฉันได้รับข้อผิดพลาดนี้: ไม่สามารถตัดทอนตาราง 'TableName' ได้เนื่องจากกำลังถูกอ้างถึงโดยข้อ จำกัด ของ FOREIGN KEY

6
เมื่อใดที่จะใช้“ ON CASCADE UPDATE”
ฉันใช้ "ON DELETE CASCADE" เป็นประจำ แต่ฉันไม่เคยใช้ "ON CASCADE UPDATE" เนื่องจากฉันไม่แน่ใจในสถานการณ์ที่จะเป็นประโยชน์ เพื่อประโยชน์ของการสนทนาให้ดูรหัสบางส่วน CREATE TABLE parent ( id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (id) ); CREATE TABLE child ( id INT NOT NULL AUTO_INCREMENT, parent_id INT, INDEX par_ind (parent_id), FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE ); สำหรับ "ON DELETE …


6
Postgres และดัชนีคีย์ต่างประเทศและคีย์หลัก
Postgres วางดัชนีในคีย์ต่างประเทศและคีย์หลักโดยอัตโนมัติหรือไม่ ฉันจะบอกได้อย่างไร มีคำสั่งที่จะส่งคืนดัชนีทั้งหมดบนตารางหรือไม่?

30
MySQL Error 1215: ไม่สามารถเพิ่มข้อ จำกัด foreign key
ฉันพยายามที่จะส่งต่อสคีมาใหม่ของฉันไปยังเซิร์ฟเวอร์ db ของฉัน แต่ฉันไม่สามารถหาสาเหตุที่ฉันได้รับข้อผิดพลาดนี้ ฉันพยายามค้นหาคำตอบที่นี่ แต่ทุกสิ่งที่ฉันพบได้กล่าวว่าตั้งค่าเอ็นจิน db เป็น Innodb หรือเพื่อให้แน่ใจว่าคีย์ที่ฉันพยายามใช้เป็น foreign key เป็นคีย์หลักในตารางของตัวเอง . ฉันได้ทำสิ่งเหล่านี้ทั้งสองถ้าฉันไม่ผิด มีความช่วยเหลืออื่น ๆ ที่คุณเสนอให้อีกไหม? Executing SQL script in server ERROR: Error 1215: Cannot add foreign key constraint -- ----------------------------------------------------- -- Table `Alternative_Pathways`.`Clients_has_Staff` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `Alternative_Pathways`.`Clients_has_Staff` ( `Clients_Case_Number` INT NOT NULL , …

11
foreign key สามารถเป็น NULL และ / หรือทำซ้ำได้หรือไม่?
โปรดอธิบายสองสิ่งให้ฉัน: foreign key สามารถเป็นค่า NULL ได้หรือไม่? รหัสต่างประเทศสามารถทำซ้ำได้หรือไม่ ยุติธรรมเท่าที่ฉันรู้NULLไม่ควรใช้ในคีย์ต่างประเทศ แต่ในบางแอปพลิเคชันของฉันฉันสามารถป้อนข้อมูลNULLทั้งใน Oracle และ SQL Server และฉันไม่รู้ว่าทำไม

13
เพิ่ม Foreign Key ไปยังตารางที่มีอยู่
ฉันต้องการเพิ่ม Foreign Key ไปยังตารางชื่อ "katalog" ALTER TABLE katalog ADD CONSTRAINT `fk_katalog_sprache` FOREIGN KEY (`Sprache`) REFERENCES `Sprache` (`ID`) ON DELETE SET NULL ON UPDATE SET NULL; เมื่อฉันพยายามทำสิ่งนี้ฉันได้รับข้อความแสดงข้อผิดพลาดนี้: Error Code: 1005. Can't create table 'mytable.#sql-7fb1_7d3a' (errno: 150) ข้อผิดพลาดในสถานะ INNODB: 120405 14:02:57 ข้อผิดพลาดในข้อ จำกัด foreign key ของ table mytable # sql-7fb1_7d3a: FOREIGN KEY …

11
จะเลือกแถวที่ไม่มีรายการที่ตรงกันในตารางอื่นได้อย่างไร
ฉันทำงานบำรุงรักษาบางอย่างในแอปพลิเคชันฐานข้อมูลและฉันค้นพบว่าความสุขของความสุขถึงแม้ว่าค่าจากตารางหนึ่งจะถูกใช้ในรูปแบบของกุญแจต่างประเทศไม่มีข้อ จำกัด ของรหัสต่างประเทศในตาราง ฉันพยายามเพิ่มข้อ จำกัด FK ในคอลัมน์เหล่านี้ แต่ฉันพบว่าเนื่องจากมีการโหลดข้อมูลที่ไม่ดีทั้งหมดในตารางจากข้อผิดพลาดก่อนหน้าซึ่งได้รับการแก้ไขอย่างไร้เดียงสาฉันต้องค้นหาแถวที่ไม่ จับคู่กับตารางอื่นแล้วลบออก ฉันพบตัวอย่างแบบสอบถามประเภทนี้บนเว็บ แต่พวกเขาดูเหมือนจะให้ตัวอย่างมากกว่าคำอธิบายและฉันไม่เข้าใจว่าทำไมจึงทำงาน บางคนสามารถอธิบายให้ฉันรู้วิธีสร้างคิวรีที่ส่งคืนแถวทั้งหมดโดยไม่มีข้อมูลตรงกันในตารางอื่นและสิ่งที่ทำอยู่เพื่อให้ฉันสามารถสร้างคิวรีเหล่านี้ด้วยตัวเองแทนที่จะมาทำงานกับ SO สำหรับทุกตารางในระเบียบนี้ ไม่มีข้อ จำกัด FK?
323 sql  foreign-keys 

22
MySQL ไม่สามารถเพิ่มข้อ จำกัด ต่างประเทศ
ดังนั้นฉันจึงพยายามเพิ่มข้อ จำกัด Foreign Key ลงในฐานข้อมูลของฉันเป็นข้อกำหนดของโครงการและทำงานเป็นครั้งแรกหรือสองครั้งในตารางที่แตกต่างกัน แต่ฉันมีสองตารางที่ฉันได้รับข้อผิดพลาดเมื่อพยายามเพิ่มข้อ จำกัด Foreign Key ข้อความแสดงข้อผิดพลาดที่ฉันได้รับคือ: ข้อผิดพลาด 1215 (HY000): ไม่สามารถเพิ่มข้อ จำกัด กุญแจต่างประเทศ นี่คือ SQL ฉันใช้ในการสร้างตารางทั้งสองตารางที่กระทำผิดมีและPatientAppointment SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=1; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; CREATE SCHEMA IF NOT EXISTS `doctorsoffice` DEFAULT CHARACTER SET utf8 ; USE `doctorsoffice` ; -- ----------------------------------------------------- -- Table `doctorsoffice`.`doctor` -- ----------------------------------------------------- DROP …
314 mysql  sql  foreign-keys 

16
การแนะนำข้อ จำกัด KEY ต่างประเทศอาจทำให้เกิดรอบหรือเส้นทางเรียงซ้อนหลายเส้นทาง - ทำไม?
ฉันต่อสู้กับสิ่งนี้มาระยะหนึ่งแล้วไม่สามารถเข้าใจได้ว่าเกิดอะไรขึ้น ฉันมีเอนทิตีการ์ดที่มีด้าน (ปกติ 2) - และทั้งการ์ดและด้านข้างมีสเตจ ฉันใช้การโยกย้าย EF Codefirst และการโยกย้ายล้มเหลวด้วยข้อผิดพลาดนี้: การแนะนำข้อ จำกัด KEY ต่างประเทศ 'FK_dbo.Sides_dbo.Cards_CardId' บนตาราง 'ด้าน' อาจทำให้เกิดรอบหรือเส้นทางเรียงซ้อนหลายเส้นทาง ระบุ ON DELETE NO ACTION หรือ UPDATE NO ACTION หรือแก้ไขข้อ จำกัด ของกุญแจต่างประเทศ นี่คือกิจการบัตรของฉัน: public class Card { public Card() { Sides = new Collection<Side>(); Stage = Stage.ONE; } [Key] [Required] public virtual …

7
วิธีค้นหาตารางทั้งหมดที่มี foreign key ที่อ้างอิง table.column โดยเฉพาะและมีค่าสำหรับ foreign key เหล่านั้นอย่างไร
ฉันมีตารางที่มีคีย์หลักที่อ้างอิงในตารางอื่น ๆ เป็นคีย์ต่างประเทศ ตัวอย่างเช่น: CREATE TABLE `X` ( `X_id` int NOT NULL auto_increment, `name` varchar(255) NOT NULL, PRIMARY KEY (`X_id`) ) CREATE TABLE `Y` ( `Y_id` int(11) NOT NULL auto_increment, `name` varchar(255) NOT NULL, `X_id` int DEFAULT NULL, PRIMARY KEY (`Y_id`), CONSTRAINT `Y_X` FOREIGN KEY (`X_id`) REFERENCES `X` (`X_id`) ) …

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

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