我最近开始学习 Linq 和 SQL。作为一个小项目,我正在为 Windows Phone 编写一个字典应用程序。该项目分为两个应用程序。一个应用程序(当前在我的 PC 上运行)在我的 PC 上生成一个 SDF 文件。第二个应用程序在我的 Windows Phone 上运行并搜索数据库。但是我想优化数据使用。字典的原始条目写在一个 TXT 文件中,文件大小约为 39MB。该文件具有以下布局
germanWord \tab englishWord \tab group
germanWord \tab englishWord \tab group
该文件被解析为具有下表的 SDF 数据库。
包含_version (rowversion)、Id (int IDENTITY)、Word (nvarchar(250))、Language (int)列的Word
表 此表包含文件中的每个单词。该语言是我代码中的一个标志,我在以后想添加更多语言时使用它。单词-语言对是独一无二的。
Table Group with columns _version (rowversion), GroupId (int IDENTITY), Caption (nvarchar(250))
此表包含不同的组。每个小组都出席一次。
包含_version (rowversion)、EntryId (int IDENTITY)、WordOneId (int)、WordTwoId(int)、GroupId(int)列的表Entry
此表将翻译链接在一起。WordOneId和WordTwoId是Word Table中一行的外键,它们包含一行的 id。GroupId定义单词所属的组。
我选择这种布局是为了减少数据占用。原始文本文件多次包含一些德语(或英语)单词。大约有 60 个组在重复自己。以编程方式,我将字数从大约 1.800.000 减少到大约 1.100.000。Group表中有大约 50 行。尽管字数减少,SDF 的文件大小约为 80MB。这是原始数据大小的两倍多。还有一点是为了加快翻译的搜索速度,我打算对Word表的Word列进行索引。通过添加此索引,文件将增长到 130MB 以上。
拥有约 60% 原始数据的 SDF 怎么会是原来的两倍?
有没有办法优化文件大小?