親のない子の行の検出
親の表に無いキーを持つ子の行を、2 つの CSV から見つける。
親の CSV と子の CSV を貼り付けてキーの列を選ぶと、親に存在しないキーを持つ子の行(孤児レコード)を一覧にします。空欄のキーは NULL として検査から除き、親のキーの重複も警告します。データは端末の外へ送信しません。
親に無いキーを持つ子の行を見つける
入力した内容は送信されません。貼り付けた文字や選んだファイルは、お使いのブラウザの中だけで処理します。本サイトのサーバーや第三者へ送信・保存しません(通信を禁止する設定でページを配信しています)。
結果
エラー 0 件・警告 2 件・情報 1 件
指摘(エラー・警告・情報)
- 警告 子 3 行 親に存在しないキー「4」を子の行が持っています。孤児レコードです。親に追加するか、子のキーを直してください。
- 警告 子 6 行 親に存在しないキー「5」を子の行が持っています。孤児レコードです。親に追加するか、子のキーを直してください。
- 情報 全体 子のキーが空欄 または NULLの行(1 行)は NULL とみなし、検査から除きました。PostgreSQL の既定の外部キー(MATCH SIMPLE 相当)では、参照列が NULL の行は制約を満たさなくてよいとされています。
| 親の行数 | 3 行 |
|---|---|
| 子の行数 | 5 行 |
| 孤児レコード | 2 行 |
| NULL で検査対象外 | 1 行 |
孤児レコードの一覧
| 子の行 | 親に無いキー | 子の行の内容 |
|---|---|---|
| 3 | 4 | 101 | 4 |
| 6 | 5 | 104 | 5 |
初期表示は入力例「注文表に、顧客表にない顧客 ID が 2 件」の結果です。入力を変えるとその場で処理し直します。判定の根拠は仕様と根拠にまとめています。
ご利用にあたって
- 孤児レコードの有無は、貼り付けた 2 つの CSV の範囲だけの結果です。データベース全体の整合性は、取り込み後の外部キー制約で確かめてください。
- 顧客情報などを含む場合でも、ブラウザの外には送信されません。画面の共有やスクリーンショットにはご注意ください。
使い方
- 親の CSV(参照される側)と、子の CSV(参照する側)を、それぞれの欄に貼り付けます。
- それぞれの 1 行目が見出しか、キーが何列目かを指定します。
- 孤児レコードの一覧で、親に無いキーと、その子の行の位置を確認します。
- 親に不足している行を追加するか、子のキーの入力ミスを直します。親のキーの重複の警告も確認します。
入力例と結果
代表的な入力・境界の入力・壊れた入力の例です。例ごとに入力・出力・指摘と、その結果になる理由(検算)を載せています。
| 入力例 | 結果 |
|---|---|
| 注文表に、顧客表にない顧客 ID が 2 件 | エラー 0 件・警告 2 件・情報 1 件 |
| 「01」と「1」の書き方の違い | エラー 0 件・警告 1 件・情報 1 件 |
| 親のキーが重複している場合 | エラー 0 件・警告 1 件・情報 1 件 |
| 引用符で囲んだカンマ入りのキー | エラー 0 件・警告 1 件・情報 1 件 |
| 子の CSV が空の場合 | エラー 1 件・警告 0 件・情報 0 件 |
このツールでできないこと(制約)
- キーは 1 列だけを扱います。複数列の複合キーや、MATCH FULL(一部だけ NULL の行を違反とする)は検査できません。
- キーの比較は文字列の完全一致です。大文字小文字、前後の空白以外の表記ゆれ、全角と半角の違いは別の値として扱います。
- 大きな CSV は端末の性能により処理に時間がかかることがあります。表には 2,000 行まで載せます。
よくある質問
キーが空欄の子の行はなぜ孤児にならないのですか?
PostgreSQL の外部キーでは、参照列が NULL の行は既定で制約を満たさなくてよいためです。空欄の行も違反にしたいときは、データベース側で列を NOT NULL にするなどの対策が必要で、この道具は NULL の行の件数を示します。
「01」と「1」は同じキーですか?
文字列としては別の値なので、「01」は親に無い孤児として扱います。数値としては同じ場合は、その旨を警告に添えるので、桁そろえやゼロ埋めの違いを疑ってください。
貼り付けた CSV は送信されますか?
検査はお使いのブラウザの中だけで行い、CSV をサーバーや第三者へ送信・保存しません。ページは通信を禁止する設定で配信しています。