親のない子の行の検出

親の表に無いキーを持つ子の行を、2 つの CSV から見つける。

親の CSV と子の CSV を貼り付けてキーの列を選ぶと、親に存在しないキーを持つ子の行(孤児レコード)を一覧にします。空欄のキーは NULL として検査から除き、親のキーの重複も警告します。データは端末の外へ送信しません。

ツールを使う 入力例と結果

親に無いキーを持つ子の行を見つける

入力した内容は送信されません。貼り付けた文字や選んだファイルは、お使いのブラウザの中だけで処理します。本サイトのサーバーや第三者へ送信・保存しません(通信を禁止する設定でページを配信しています)。

結果

エラー 0 件・警告 2 件・情報 1 件

指摘(エラー・警告・情報)

  • 警告 子 3 行 親に存在しないキー「4」を子の行が持っています。孤児レコードです。親に追加するか、子のキーを直してください。
  • 警告 子 6 行 親に存在しないキー「5」を子の行が持っています。孤児レコードです。親に追加するか、子のキーを直してください。
  • 情報 全体 子のキーが空欄 または NULLの行(1 行)は NULL とみなし、検査から除きました。PostgreSQL の既定の外部キー(MATCH SIMPLE 相当)では、参照列が NULL の行は制約を満たさなくてよいとされています。
親の行数3 行
子の行数5 行
孤児レコード2 行
NULL で検査対象外1 行

孤児レコードの一覧

孤児レコードの一覧
子の行親に無いキー子の行の内容
34101 | 4
65104 | 5

初期表示は入力例「注文表に、顧客表にない顧客 ID が 2 件」の結果です。入力を変えるとその場で処理し直します。判定の根拠は仕様と根拠にまとめています。

ご利用にあたって

  • 孤児レコードの有無は、貼り付けた 2 つの CSV の範囲だけの結果です。データベース全体の整合性は、取り込み後の外部キー制約で確かめてください。
  • 顧客情報などを含む場合でも、ブラウザの外には送信されません。画面の共有やスクリーンショットにはご注意ください。

使い方

  1. 親の CSV(参照される側)と、子の CSV(参照する側)を、それぞれの欄に貼り付けます。
  2. それぞれの 1 行目が見出しか、キーが何列目かを指定します。
  3. 孤児レコードの一覧で、親に無いキーと、その子の行の位置を確認します。
  4. 親に不足している行を追加するか、子のキーの入力ミスを直します。親のキーの重複の警告も確認します。

入力例と結果

代表的な入力・境界の入力・壊れた入力の例です。例ごとに入力・出力・指摘と、その結果になる理由(検算)を載せています。

入力例と結果の一覧
入力例結果
注文表に、顧客表にない顧客 ID が 2 件エラー 0 件・警告 2 件・情報 1 件
「01」と「1」の書き方の違いエラー 0 件・警告 1 件・情報 1 件
親のキーが重複している場合エラー 0 件・警告 1 件・情報 1 件
引用符で囲んだカンマ入りのキーエラー 0 件・警告 1 件・情報 1 件
子の CSV が空の場合エラー 1 件・警告 0 件・情報 0 件

このツールでできないこと(制約)

よくある質問

キーが空欄の子の行はなぜ孤児にならないのですか?

PostgreSQL の外部キーでは、参照列が NULL の行は既定で制約を満たさなくてよいためです。空欄の行も違反にしたいときは、データベース側で列を NOT NULL にするなどの対策が必要で、この道具は NULL の行の件数を示します。

「01」と「1」は同じキーですか?

文字列としては別の値なので、「01」は親に無い孤児として扱います。数値としては同じ場合は、その旨を警告に添えるので、桁そろえやゼロ埋めの違いを疑ってください。

貼り付けた CSV は送信されますか?

検査はお使いのブラウザの中だけで行い、CSV をサーバーや第三者へ送信・保存しません。ページは通信を禁止する設定で配信しています。