簡體   English   中英

在MySQL中,如何在保持參照完整性的同時從單個表加載多個表?

[英]In MySQL, how do I load multiple tables from a single table while keeping referential integrity?

更新: “將foreign_key_checks設置為1不會觸發對現有表數據的掃描。因此,將不會驗證foreign_key_checks = 0時添加到表中的行的一致性。” 消息來源:5.1.4。 服務器系統變量-foreign_key_checks- 因此,似乎無法關閉foreign_key_checks ...

需要將具有100,000條以上記錄的單個文件中的數據加載到MySQL上的多個表中,並保持文件/表中定義的關系; 表示關系已經匹配。 該解決方案應在最新版本的MySQL上運行,並且可以使用InnoDB或MyISAM引擎。

對於這一切,我是一個全新的人,幾乎沒有自動生成ID和建立外鍵關系的經驗。 任何指針將不勝感激。

請參閱上面的UPDATE注釋: 我可能會補充說,不需要在實時數據庫上進行更新,這意味着可以禁用外鍵約束,然后執行插入,然后再次啟用約束。 據我了解,如果數據庫的參照完整性存在問題,則該操作將失敗。

如果插入失敗或無法維護參照完整性,則所有方法都應包括驗證和回滾/清除策略。

再說一次,這是全新的,如果您有任何疑問或要求澄清,我們會盡力提供盡可能多的信息-請讓我知道。

謝謝!


數據示例:為了更好地舉例說明,讓我們假設我正在嘗試加載一個包含員工姓名,他們過去所居住的辦公室以及其工作職位歷史記錄的選項卡的文件。

文件:

EmployeeName<tab>OfficeHistory<tab>JobLevelHistory
John Smith<tab>501<tab>Engineer
John Smith<tab>601<tab>Senior Engineer
John Smith<tab>701<tab>Manager
Alex Button<tab>601<tab>Senior Assistant
Alex Button<tab>454<tab>Manager

注意:單個表數據庫已完全規范化(可能與單個表一樣多)-例如,在“ John Smith”的情況下,只有一個John Smith。 意味着沒有重復會導致參照完整性沖突。

MyOffice數據庫架構具有下表:

Employee (nId, name)
Office (nId, number)
JobTitle (nId, titleName)
Employee2Office (nEmpID, nOfficeId)
Employee2JobTitle (nEmpId, nJobTitleID)

如何使用MySQL將文件加載到自動生成Employee,Office和JobTitle的ID上方的架構中,並維護雇員與辦公室,雇員與職務之間的關系?

所以在這種情況下。 表格應如下所示:

Employee
1 John Smith
2 Alex Button

Office
1 501
2 601
3 701
4 454

JobTitle
1 Engineer
2 Senior Engineer
3 Manager
4 Senior Assistant

Employee2Office
1 1
1 2
1 3
2 2
2 4

Employee2JobTitle
1 1
1 2
1 3
2 4
2 3

我將所有文件上傳到帶有以下表的登台數據庫中:

Temp_Employee(nId,名稱)Temp_Office(nId,數字)...

這些表上沒有約束或FK。 如果記錄已上傳,則可以為記錄添加ID,檢查完整性,然后將其移至實時數據庫(禁用fks,移動數據,再次啟用fks)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM