我正在尝试为android构建一个本地数据库。我有点失落。
该应用程序是一个文档管理应用程序..我需要保存以下内容...
Document
--------
Id
import date
List<DocTags>
extension
etc
然后我有许多具有不同信息的docTag
Location
-------
id
name
lat
long
Company
------
Id
name
Street
town
大约10种其他文档类型。
我意识到我需要一个表来存储分配给文档的所有docTag id,但这些id与很多不同的表有关。我的问题是我需要通过搜索doctag Id或多个doctag id来检索文档列表。我们需要假设我们有10,000个文档,其中可能相当于40,000个doc标记。因此,性能是一个主要问题。构建数据库的最佳方法是什么?
我还需要搜索doctag名称。
谢谢
答案 0 :(得分:2)
我有很多关于Document to Tag的JOIN表。
我不在多个表中都有这些标签。这打破了第一个正常形式。如果其他表需要引用Tag行,也可以给它们JOIN表。
您在下面的评论表明,需要进行规范化复习,或者关系模型可能不是您问题的最佳选择。也许NoSQL,基于文档的解决方案更适合。
答案 1 :(得分:-2)
我只使用过一次或两次SQLite,但是根据我对其他人的经验 数据库系统,我强烈建议从一个可靠的关系模式开始, 在尝试其他任何事情之前评估表现。
在您的情况下,我认为架构看起来像这样。
(当然每个doctag还有两个附加表)。
你会有很多表,可能需要很长时间才能获得所有信息, 但这不一定是坏事。拥有架构关系将允许查询 优化器可以完成其工作,并使将来的查询更容易编写。
获取文档的查询,以及有关该文档的位置和公司的任何信息(或返回 如果文档没有此标记,则返回null)将如下所示:
SELECT * FROM Document
LEFT JOIN DocumentLocation ON Document.ID=DocumentLocation.DocumentID
INNER JOIN Location ON DocumentLocation.LocationID=Location.LocationID
LEFT JOIN DocumentCompany ON Document.ID=DocumentCompany.DocumentID
INNER JOIN Company ON DocumentCompany.CompanyID=Company.CompanyID
如果性能确实太慢,您可以根据应用程序的预期使用模式调查改进性能的策略(例如缓存,附加索引)。