表 1: キッチン シンクを含むすべて。間違った形式の日付 (最後の年なのでその列でソートできない)、VARCHAR として格納された数値、「番地」列に完全な住所、名列に名と姓、名字列に市区町村、不完全な住所、何年にもわたって変更された一連のルール、重複レコード、不完全なレコード、ガベージレコードに基づいて、あるフィールドから別のフィールドにデータを移動することにより、前の行を更新します...名前を付けます...ああ、もちろん、TIMESTAMPまたはPRIMARYではありませんKEY 列が見えます。
表 2: この赤ん坊をクラックして開いた時点で、正常化の望みはすべて消え去りました。各エントリに行があり、テーブル 1 の行を更新します。したがって、明日はありません (800MB 相当) のような重複と、Phone1 Phone2 Phone3 Phone4 ... Phone15 のような列 (これらは phone とは呼ばれません。説明のためにこれを使用します) 外部キーは..よく推測してください。table1 の行にどのようなデータがあったかによって、3 つの候補があります。
表 3: 悪化することはありますか? そうそう。「外部キーは、ダッシュ、ドット、数字、および文字の VARCHAR 列の組み合わせです! それが一致しない場合 (多くの場合一致しません)、同様の製品コードの 2 番目の列が必要です。それらの中のデータとの相関関係はなく、必須の Phone1 Phone2 Phone3 Phone4... Phone15. Table1 から複製された列があり、TIMESTAMP または PRIMARY KEY 列が見えません。
表 4: 進行中の作業として説明されており、いつでも変更される可能性があります。それは本質的に他のものと似ています。
100 万行近くになると、これは大混乱です。幸いなことに、それは私の大きな混乱ではありません。残念ながら、「顧客」ごとに複合レコードを引き出す必要があります。
最初に、Table1 に PRIMARY KEY を追加し、すべての日付をソート可能な形式に変換する 4 つのステップの変換を考案しました。次に、Table1 を使用して他のテーブルからプルしてコンポジットを形成できるようになるまで、フィルタリングされたデータを返すクエリのステップをさらに 2 つ実行します。数週間の作業の後、いくつかのトリックを使用してこれを 1 つのステップにまとめました。これで、アプリを混乱に向けて、複合データのきれいなテーブルを引き出すことができます。幸いなことに、目的に必要な電話番号は 1 つだけなので、テーブルの正規化は問題になりません。
毎日何百人もの従業員が想像もつかない方法でこのデータベースを追加/更新/削除し、毎晩新しい行を取得する必要があるためです。
どのテーブルの既存の行も変更可能であり、TIMESTAMP ON UPDATE 列がないため、何が起こったのかを知るためにログに頼る必要があります。もちろん、これはバイナリログがあることを前提としていますが、ありません!
鉛風船のように下がったコンセプトをご紹介。私は彼らの子供たちが実験的な手術を受けなければならないだろうと彼らに言ったかもしれません. 彼らは正確にはハイテクではありません...あなたが集めていなかった場合に備えて...
私の会社がひどく欲しがっている貴重な情報を彼らが持っているので、状況は少しデリケートです. 私は、大企業の上級管理職 (彼らがどのようであるかを知っています) から「それを実現する」ように派遣されました。
bin ログ ファイルをさらに別のアプリケーションで解析し、日中にそのデータベースに対して何を行ったかを把握し、それに応じてテーブルを合成する以外に、夜間の更新を処理する方法は考えられません。私のテーブルに何をすべきかを理解するために、私は本当に彼らの table1 を見る必要があるだけです。他のテーブルは、レコードをフラッシュするためのフィールドを提供するだけです。(混乱の重複があるため、MASTER SLAVE を使用しても役に立ちません。)
別の方法は、table1 のすべての行に対して一意のハッシュを作成し、ハッシュ テーブルを作成することです。次に、毎晩データベース全体を調べて、ハッシュが一致するかどうかを確認します。そうでない場合は、そのレコードを読み取ってデータベースに存在するかどうかを確認し、存在する場合はデータベースで更新し、存在しない場合は新しいレコードとして INSERT します。これは醜く、高速ではありませんが、バイナリ ログ ファイルの解析もきれいではありません。
問題を明確にするためにこれを書きました。多くの場合、他の人にそれを話すと、問題が明確になり、解決策がより明白になります。この場合、私はより大きな頭痛を抱えています!
あなたの考えは大歓迎です。