2009-07-22 17 views
4

私は、80カラムと1000万行の1つの巨大なテーブルで満たされたmySQLデータベースを持っています。データに不一致がある可能性があります。mySQLデータベースの自動化された正規化 - それを行う方法?

私はデータベースを自動化された効率的な方法で標準化したいと考えています。

私はjava/C++/...を使用してこれを行うことができましたが、できるだけデータベース内でやりたいと思います。私は、データベース外の作業は非常に遅くなると思います。

どうすればよいですか?良いリソース/チュートリアルとは何か?

私はではありません。正規化のヒントを探しています(Googleを使用してこのようなものがたくさん見つかりました)!

答えて

2

大雑把なデータを整理する際に、私はユーザー定義のmysql関数を作成して、典型的なデータスクラビングを行います。後でそれらを再利用することができます。この方法に近づくことで、変更の有無にかかわらず使用できる既存のudfが見つかるかどうかを確認することができます... mysqludf.org

+0

ありがとうございます、mysqludfは私が探しているリソースの一種です。 – CL23

4

私はあなたがそれを自動化することはできません。必要なテーブルを作成し、各データを手作業で照会して置き換える必要があります。

例えば、

INSERT INTO contact 
SELECT DISTINCT first_name, last_name, phone 
FROM massive_table; 

、あなたは大規模なテーブルの外に列をドロップし、contact_id列に置き換えることもできます。

1対多のテーブルに格納されている行を引き出すときも同様の処理が行われます。

3

「類似の」エンティティを識別し、それらを別々のタブに分割するために、列を調べる必要があります。確かに、自動化されたツールは列の一部で同じ値を持つ行のグループを識別できますが、データを理解した人は、これらが本当に別個のエンティティとして属するかどうかを判断する必要があります。

ここでは、あなたの列が名、姓、住所、市区町村、州、郵便番号だったとします。自動化されたツールは、同じ姓、住所、市区町村、州、および郵便番号を持つ同じ家族のメンバーであった人々の行を特定し、これらの5つの列がエンティティを表していると間違って結論づける可能性があります。それは、その後アップテーブルを分割する場合があります

ファーストネーム、

をReferenceIDし、別のテーブル

ID、姓、住所、市、州は、私が何を意味するかを参照してください

ジップ?

関連する問題