6

80 列と 1000 万行の 1 つの巨大なテーブルで満たされた mySQL データベースがあります。データに矛盾がある可能性があります。

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

java/c++/... を使用して行うこともできますが、可能な限りデータベース内で行いたいと考えています。データベース外での作業は、非常に遅くなると思います。

それを行う方法に関する提案はありますか?始めるのに適したリソース/チュートリアルは何ですか?

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

4

3 に答える 3

5

列を調べて「似た」エンティティを識別し、それらを個別の表に分割する必要があります。せいぜい自動化されたツールは、いくつかの列に対して同じ値を持つ行のグループを識別するかもしれませんが、データを理解した人は、それらが本当に別個のエンティティとして属しているかどうかを判断する必要があります。

これは不自然な例です。列が名、姓、住所、都市、州、郵便番号であるとします。自動化されたツールは、同じ家系の名前、住所、都市、州、郵便番号を持つ同じ家族のメンバーである人々の行を識別し、それらの5つの列がエンティティを表していると誤って結論付ける可能性があります。次に、テーブルを分割する場合があります。

名、ReferenceID

と別のテーブル

ID、姓、住所、市、州、郵便番号

私が何を意味するのか分かりますか?

于 2009-07-22T19:08:14.977 に答える
4

自動化できる方法は考えられません。必要なテーブルを作成してから、各データを調べて手動クエリに置き換える必要があります。

例えば、

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

次に、大規模なテーブルから列を削除して、contact_id列に置き換えることができます。

1対多のテーブルに入る行を引き出すときにも同様のプロセスがあります。

于 2009-07-22T19:02:55.550 に答える