最近、Linq と SQL を学び始めました。小さなプロジェクトとして、Windows Phone 用の辞書アプリケーションを作成しています。プロジェクトは 2 つのアプリケーションに分割されます。1 つのアプリケーション (現在 PC で実行されている) は、PC で SDF ファイルを生成します。2 番目のアプリは Windows Phone で実行され、データベースを検索します。ただし、データの使用を最適化したいと考えています。ディクショナリの生のエントリは、ファイルサイズが約 39MB の TXT ファイルに書き込まれます。ファイルには次のレイアウトがあります
germanWord \tab englishWord \tab group
germanWord \tab englishWord \tab group
ファイルは、次のテーブルを含む SDF データベースに解析されます。
テーブル_version (rowversion)、Id (int IDENTITY)、Word (nvarchar(250))、Language (int) の列を持つ単語
このテーブルには、ファイル内のすべての単語が含まれます。言語は、後で言語を追加する場合に使用したコードのフラグです。単語と言語のペアは一意です。
列_version (rowversion)、GroupId (int IDENTITY)、Caption (nvarchar(250))を持つテーブルグループ
このテーブルには、さまざまなグループが含まれています。各グループは 1 回だけ出席します。
列_version (rowversion)、EntryId (int IDENTITY)、WordOneId (int)、WordTwoId(int)、GroupId(int) を持つテーブルエントリ
このテーブルは翻訳をリンクします。WordOneIdとWordTwoIdは、 Wordテーブル内の行への外部キーであり、行の ID が含まれています。GroupIdは、単語が属するグループを定義します。
データのフットプリントを減らすために、このレイアウトを選択しました。生のテキスト ファイルには、ドイツ語 (または英語) の単語が複数回含まれています。約 60 のグループが繰り返し参加しています。プログラム的に、単語数を約 1.800.000 から約 1.100.000 に減らします。Groupテーブルには約 50 行あります。単語数が減っているにもかかわらず、SDF のファイルサイズは約 80MB です。これは生データの 2 倍以上のサイズです。もう 1 つのことは、翻訳の検索を高速化するために、 WordテーブルのWord列にインデックスを付ける予定です。このインデックスを追加すると、ファイルは 130MB を超えます。
元のデータの約 60% を含む SDF が 2 倍の大きさになるのはどうしてでしょうか?
ファイルサイズを最適化する方法はありますか?