0

更新:「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 の注記を参照してください: ライブ データベースで更新を行う必要はないことを付け加えるかもしれません。つまり、外部キー制約を無効にしてから挿入を実行し、制約を再度有効にしても問題ありません。データベースの参照整合性に問題がある場合、操作が失敗することを理解しているためです。

すべてのアプローチには、挿入が失敗した場合、または参照整合性の維持に失敗した場合の検証とロールバック/クリーンアップ戦略のいくつかを含める必要があります。

繰り返しますが、これはまったく新しいことであり、質問や明確化の要求がある場合は、できるだけ多くの情報を提供するために最善を尽くしています.

ありがとう!


SAMPLE DATA:例をより詳しく説明するために、従業員名、過去に使用したオフィス、およびタブで区切られた役職履歴を含むファイルを読み込もうとしていると仮定します。

ファイル:

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 は 1 つだけです。つまり、参照整合性の競合につながる重複はありません。

MyOfficeデータベース スキーマには次のテーブルがあります。

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

MySQL を使用して、従業員、オフィス、および役職の 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
4

1 に答える 1

1

次のテーブルを使用して、すべてのファイルをステージング データベースにアップロードします。

Temp_Employee (nId、名前) Temp_Office (nId、番号) ...

これらのテーブルには制約や FK はありません。レコードがアップロードされている場合は、レコードの ID を追加し、整合性を確認してからライブ データベースに移動できます (fks を無効にし、データを移動し、fks を再度有効にします)。

于 2010-11-10T15:17:32.203 に答える