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

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

12
วิธีลบข้อ จำกัด ออกจากตาราง MySQL ของฉัน
ฉันต้องการลบข้อ จำกัด ออกจากตารางของฉัน คำถามของฉันคือ: ALTER TABLE `tbl_magazine_issue` DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users` แต่ฉันได้รับข้อผิดพลาด: #1064- คุณมีข้อผิดพลาดในไวยากรณ์ SQL ของคุณ ตรวจสอบคู่มือที่สอดคล้องกับรุ่นเซิร์ฟเวอร์ MySQL ของคุณเพื่อหาไวยากรณ์ที่ถูกต้องเพื่อใช้ใกล้กับ 'ข้อ จำกัดFK_tbl_magazine_issue_mst_users' ที่บรรทัดที่ 1

7
คอลัมน์ตารางที่มี Foreign Key เป็นโมฆะได้หรือไม่
ฉันมีตารางที่มีหลายคอลัมน์ ID ไปยังตารางอื่น ๆ ฉันต้องการคีย์ต่างประเทศเพื่อบังคับใช้ความสมบูรณ์ก็ต่อเมื่อฉันใส่ข้อมูลลงในนั้น หากฉันทำการอัปเดตในภายหลังเพื่อเติมข้อมูลคอลัมน์นั้นควรตรวจสอบข้อ จำกัด ด้วย (นี่อาจขึ้นอยู่กับเซิร์ฟเวอร์ฐานข้อมูลฉันใช้ประเภทตาราง MySQL & InnoDB) ฉันเชื่อว่านี่เป็นความคาดหวังที่สมเหตุสมผล แต่โปรดแก้ไขฉันหากฉันผิด

21
ข้อผิดพลาด Mysql 1452 - ไม่สามารถเพิ่มหรืออัปเดตแถวลูกได้: ข้อ จำกัด รหัสต่างประเทศล้มเหลว
ฉันมีปัญหาแปลก ๆ เล็กน้อย ฉันกำลังพยายามเพิ่มคีย์ต่างประเทศให้กับตารางหนึ่งที่อ้างอิงอีกอัน แต่มันล้มเหลวด้วยเหตุผลบางอย่าง ด้วยความรู้ที่ จำกัด ของฉันเกี่ยวกับ MySQL สิ่งเดียวที่อาจเป็นที่สงสัยก็คือมีคีย์ต่างประเทศในตารางอื่นที่อ้างอิงถึงสิ่งที่ฉันพยายามอ้างอิง ฉันได้ทำSHOW CREATE TABLEแบบสอบถามในทั้งสองตารางsourcecodes_tagsเป็นตารางที่มีคีย์ต่างประเทศsourcecodesเป็นตารางอ้างอิง CREATE TABLE `sourcecodes` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `user_id` int(11) unsigned NOT NULL, `language_id` int(11) unsigned NOT NULL, `category_id` int(11) unsigned NOT NULL, `title` varchar(40) CHARACTER SET utf8 NOT NULL, `description` text CHARACTER SET utf8 …

13
คำสั่ง INSERT ขัดแย้งกับข้อ จำกัด KEY ต่างประเทศ - SQL Server
ฉันได้รับข้อผิดพลาดดังต่อไปนี้ คุณจะกรุณาช่วยฉันหน่อยได้ไหม? ข่าวสารเกี่ยวกับ 547 ระดับ 16 สถานะ 0 บรรทัด 1 คำสั่ง INSERT ขัดแย้งกับข้อ จำกัด ของคีย์ต่างประเทศ "FK_Sup_Item_Sup_Item_Cat" ความขัดแย้งเกิดขึ้นในฐานข้อมูล "dev_bo", ตาราง "dbo.Sup_Item_Cat" คำสั่งถูกยกเลิก รหัส: insert into sup_item (supplier_id, sup_item_id, name, sup_item_cat_id, status_code, last_modified_user_id, last_modified_timestamp, client_id) values (10162425, 10, 'jaiso', '123123', 'a', '12', '2010-12-12', '1062425') คอลัมน์สุดท้ายclient_idทำให้เกิดข้อผิดพลาด ฉันพยายามใส่ค่าที่มีอยู่แล้วในdbo.Sup_Item_Catคอลัมน์ให้สอดคล้องกับ sup_item .. แต่ไม่มีความสุข :-(

8
แสดงข้อ จำกัด ในคำสั่ง tables
ฉันมีตารางที่ฉันได้ลองตั้งค่าความสัมพันธ์ของ PK FK แต่ฉันต้องการตรวจสอบสิ่งนี้ ฉันจะแสดงการควบคุม PK / FK ได้อย่างไร ผมเห็นนี้หน้าคู่มือ แต่มันไม่แสดงตัวอย่างและ Google Search ของฉันคือไร้ผลยัง ฐานข้อมูลของฉันคือcredentialing1และตารางข้อ จำกัด ของฉันและpracticescred_insurances

30
การย้ายข้อมูล: ไม่สามารถเพิ่มข้อ จำกัด กุญแจต่างประเทศ
ฉันพยายามที่จะสร้างกุญแจต่างประเทศใน Laravel แต่เมื่อฉันย้ายตารางของฉันโดยใช้artisanฉันโยนข้อผิดพลาดต่อไปนี้: [Illuminate\Database\QueryException] SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL : alter table `priorities` add constraint priorities_user_id_foreign foreign key (`user_id`) references `users` (`id`)) รหัสการโยกย้ายของฉันเป็นเช่นนั้น: ไฟล์การโยกย้ายลำดับความสำคัญ public function up() { // Schema::create('priorities', function($table) { $table->increments('id', true); $table->integer('user_id'); $table->foreign('user_id')->references('id')->on('users'); $table->string('priority_name'); $table->smallInteger('rank'); $table->text('class'); $table->timestamps('timecreated'); }); } /** * Reverse …

9
ฉันจะค้นหาตารางใดที่อ้างอิงตารางที่กำหนดใน Oracle SQL Developer
ในOracle SQL Developerหากฉันกำลังดูข้อมูลบนตารางฉันสามารถดูข้อ จำกัด ที่ให้ฉันเห็นคีย์ต่างประเทศ (และตารางใดที่อ้างอิงโดยตารางนี้) และฉันสามารถดูการพึ่งพาเพื่อดูว่าอะไร แพคเกจและการอ้างอิงตารางดังกล่าว แต่ฉันไม่แน่ใจว่าจะหาตารางใดอ้างอิงตาราง ตัวอย่างเช่นสมมติว่าฉันกำลังดูempตาราง มีอีกตารางหนึ่งemp_deptที่จับพนักงานที่ทำงานในแผนกซึ่งอ้างอิงถึงempตารางผ่านemp_idซึ่งเป็นคีย์หลักของempตาราง มีวิธี (ผ่านองค์ประกอบ UI บางอย่างในโปรแกรมไม่ใช่ผ่าน SQL) เพื่อค้นหาว่าemp_deptตารางอ้างอิงempตารางโดยที่ฉันไม่ต้องรู้ว่ามีemp_deptตารางอยู่หรือไม่

3
ข้อ จำกัด กุญแจต่างประเทศ: เมื่อใดที่จะใช้ ON UPDATE และ ON DELETE
ฉันออกแบบสคีมาฐานข้อมูลของฉันโดยใช้ MySQL Workbench ซึ่งค่อนข้างเจ๋งเพราะคุณสามารถทำไดอะแกรมและแปลงมัน: P อย่างไรก็ตามฉันตัดสินใจใช้ InnoDB เพราะมันรองรับ Foreign Key สิ่งหนึ่งที่ฉันสังเกตเห็นคือมันช่วยให้คุณสามารถตั้งค่าในการปรับปรุงและตัวเลือกการลบสำหรับคีย์ต่างประเทศ บางคนสามารถอธิบายว่า "จำกัด ", "เรียงซ้อน" และตั้งค่าเป็นโมฆะได้อย่างไรในตัวอย่างง่ายๆ ตัวอย่างเช่นสมมติว่าผมมีตารางซึ่งรวมถึงuser userIDและบอกว่าฉันมีตารางข้อความmessageซึ่งมีหลายต่อหลายคนที่มีคีย์ต่างประเทศ 2 อัน (ซึ่งอ้างอิงคีย์หลักเดียวกันuserIDในuserตาราง) การตั้งค่าตัวเลือก On Update และ On Delete มีประโยชน์ในกรณีนี้หรือไม่? ถ้าเป็นเช่นนั้นฉันจะเลือกอันไหน หากนี่ไม่ใช่ตัวอย่างที่ดีคุณช่วยยกตัวอย่างที่ดีเพื่ออธิบายว่าสิ่งเหล่านี้มีประโยชน์หรือไม่ ขอบคุณ

11
MySQL ลบคีย์ต่างประเทศบางส่วน
ฉันมีตารางที่ใช้คีย์หลักในตารางอื่นหลายตารางและมีคีย์ต่างประเทศหลายตาราง CREATE TABLE location ( locationID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ... ) ENGINE = InnoDB; CREATE TABLE assignment ( assignmentID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, locationID INT NOT NULL, FOREIGN KEY locationIDX (locationID) REFERENCES location (locationID) ... ) ENGINE = InnoDB; CREATE TABLE assignmentStuff ( ... assignmentID …

12
ไม่สามารถอ้างอิงเอนทิตีวัตถุโดย IEntityChangeTracker หลายอินสแตนซ์ ขณะที่เพิ่มวัตถุที่เกี่ยวข้องกับเอนทิตีใน Entity Framework 4.1
ฉันพยายามบันทึกรายละเอียดพนักงานซึ่งมีการอ้างอิงกับเมือง แต่ทุกครั้งที่ฉันพยายามบันทึกผู้ติดต่อของฉันซึ่งผ่านการตรวจสอบแล้วฉันจะได้รับการยกเว้น"ADO.Net Entity Framework วัตถุเอนทิตีไม่สามารถอ้างอิงได้ด้วยหลายอินสแตนซ์ของ IEntityChangeTracker" ฉันได้อ่านโพสต์มากมาย แต่ยังไม่ได้รับความคิดที่แน่นอนของสิ่งที่ต้องทำ ... รหัสการคลิกปุ่มบันทึกของฉันได้รับด้านล่าง protected void Button1_Click(object sender, EventArgs e) { EmployeeService es = new EmployeeService(); CityService cs = new CityService(); DateTime dt = new DateTime(2008, 12, 12); Payroll.Entities.Employee e1 = new Payroll.Entities.Employee(); Payroll.Entities.City city1 = cs.SelectCity(Convert.ToInt64(cmbCity.SelectedItem.Value)); e1.Name = "Archana"; e1.Title = "aaaa"; e1.BirthDate …

13
จะค้นหาการพึ่งพาคีย์ต่างประเทศใน SQL Server ได้อย่างไร
ฉันจะค้นหาการพึ่งพาคีย์ต่างประเทศทั้งหมดในคอลัมน์ใดคอลัมน์หนึ่งได้อย่างไร อะไรคือทางเลือกที่แตกต่างกัน (กราฟิกใน SSMS, แบบสอบถาม / มุมมองใน SQL Server, เครื่องมือฐานข้อมูลบุคคลที่สาม, รหัสใน. NET)

3
ข้อ จำกัด ที่สำคัญต่างประเทศ MySQL ลบน้ำตก
ฉันต้องการใช้กุญแจต่างประเทศเพื่อรักษาความสมบูรณ์และหลีกเลี่ยงเด็กกำพร้า (ฉันใช้ innoDB แล้ว) ฉันจะสร้างสถานะ SQL ที่ลบบนแบบเรียงซ้อนได้อย่างไร หากฉันลบหมวดหมู่ฉันจะแน่ใจได้อย่างไรว่าจะไม่ลบหมวดหมู่ที่เกี่ยวข้องกับหมวดหมู่อื่น ตารางเดือย "categories_products" สร้างความสัมพันธ์แบบกลุ่มต่อกลุ่มระหว่างสองตารางอื่น ๆ categories - id (INT) - name (VARCHAR 255) products - id - name - price categories_products - categories_id - products_id

14
SQL DROP ข้อ จำกัด คีย์ต่างประเทศของตาราง
ถ้าฉันต้องการลบตารางทั้งหมดในฐานข้อมูลของฉันเช่นนี้มันจะดูแลข้อ จำกัด foreign key หรือไม่? ถ้าไม่ฉันจะดูแลก่อนได้อย่างไร GO IF OBJECT_ID('dbo.[Course]','U') IS NOT NULL DROP TABLE dbo.[Course] GO IF OBJECT_ID('dbo.[Student]','U') IS NOT NULL DROP TABLE dbo.[Student]

10
แบบแผนการตั้งชื่อ Foreign Key
ฉันเพิ่งเริ่มทำงานกับคีย์ต่างประเทศเป็นครั้งแรกและฉันสงสัยว่าจะมีรูปแบบการตั้งชื่อมาตรฐานที่จะใช้กับพวกเขาหรือไม่? รับตารางเหล่านี้: task (id, userid, title) note (id, taskid, userid, note); user (id, name) ตำแหน่งที่ Tasks มี Notes งานเป็นเจ้าของโดยผู้ใช้และผู้เขียนผู้ใช้ Notes คีย์ต่างประเทศทั้งสามจะตั้งชื่ออย่างไรในสถานการณ์นี้ หรือมิฉะนั้นก็มีความสำคัญหรือไม่ อัปเดต : คำถามนี้เกี่ยวกับชื่อคีย์ต่างประเทศไม่ใช่ชื่อฟิลด์!

9
Foreign Key ปรับปรุงประสิทธิภาพการค้นหาหรือไม่
สมมติว่าฉันมี 2 ตารางผลิตภัณฑ์และหมวดหมู่สินค้า ทั้งสองตารางมีความสัมพันธ์กับ CategoryId และนี่คือแบบสอบถาม SELECT p.ProductId, p.Name, c.CategoryId, c.Name AS Category FROM Products p INNER JOIN ProductCategories c ON p.CategoryId = c.CategoryId WHERE c.CategoryId = 1; เมื่อฉันสร้างแผนการดำเนินการ ProductCategories ตารางทำการค้นหาดัชนีคลัสเตอร์ซึ่งเป็นไปตามที่คาดหวัง แต่สำหรับผลิตภัณฑ์ในตารางจะทำการสแกนดัชนีคลัสเตอร์ซึ่งทำให้ฉันสงสัย เหตุใด FK จึงไม่ช่วยปรับปรุงประสิทธิภาพการสืบค้น ดังนั้นฉันต้องสร้างดัชนีบน Products.CategoryId เมื่อฉันสร้างแผนการดำเนินการอีกครั้งทั้งสองตารางทำการค้นหาดัชนี และค่าใช้จ่ายทรีย่อยโดยประมาณจะลดลงมาก คำถามของฉันคือ: นอกจาก FK จะช่วยจำกัดความสัมพันธ์แล้วยังมีประโยชน์อื่นอีกไหม? ปรับปรุงประสิทธิภาพการสืบค้นหรือไม่ ฉันควรสร้างดัชนีในคอลัมน์ FK ทั้งหมด (ไลค์ผลิตภัณฑ์ Products.CategoryId) ในตารางทั้งหมดหรือไม่

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