【问题标题】:What´s better? Several smaller databases or one large什么更好?几个较小的数据库或一个大的
【发布时间】:2017-06-30 18:40:55
【问题描述】:

我正在申请学习外语单词,所以我将这些单词存储在我的数据库中。这些词被分隔,例如分为3 个难度级别。每个级别都由一些单词组组成,这些组引入了 SQLite db 的 TABLES。我使用 SQLiteOpenHelper 作为应用程序和数据库之间的通信。

现在我的问题。什么是更好的?

  • 制作 3 个较小的数据库,每个数据库用于每个级别并使用自己的 SQLiteOpenHelper,因此将 3 个 dbs 与 3 个打开的助手一起。
  • 制作1个大型数据库,这3个级别将在哪里,这意味着 许多表,但只有 1 个 SQLiteOpenHelper。

感谢您的任何建议或意见。

【问题讨论】:

  • 请定义“更好”。
  • 当然,我有 3 个数据库和助手的选项,并且在使用应用程序的任何时间后,它都会冻结。好像突然从空数据库中读取 - 错误代码:1(SQLITE_ERROR) 原因:SQL(查询)错误或缺少数据库。 (“null”附近:语法错误(代码 1):,编译时:SELECT MAX(_id) FROM null)

标签: android sqlite database-design


【解决方案1】:

我建议使用 1 个大型数据库 (DB)。

您不必担心制作大型 DB,DB 是为了存储大量数据(甚至是多对多表)而发明的。创建和维护一个 DB 比创建多个 DB 要容易得多,并且使用一个 DB,您的代码会更清晰。

我不知道你的程序,但我会更进一步:如果你存储它们的相同信息,我宁愿将所有单词存储在同一个表中,并添加一列来显示级别,另一列显示他们所属的组。

SQL 的主要思想是您并不真正关心您的数据库需要多少空间以及查找查询结果需要多少时间,因为数据库管理系统(在您的情况下是 SQLiteOpenHelper 和 SQLite)考虑到空间和时间,效率非常高。相反,您应该专注于设计一个可以轻松扩展的系统(例如,如果您想在包含单词的表中添加另一列(例如,您想要存储有关单词的新信息)或想要在后期发展),结构清晰。通过 SQL 的 SELECT 命令分隔组和级别可能会损失几毫秒,但您的数据库将更加灵活 - 您可以轻松添加级别和组并添加有关单词的更多信息。设计好DB的关键:不同的数据在不同的表中,同种的数据在同一个表中......

【讨论】:

    【解决方案2】:

    您在评论中提到的错误几乎可以肯定是您的应用程序代码中的错误。具有多个数据库的应用程序没有理由遇到这种错误。

    也就是说,我对您最初问题的回答是客观上“更好”的是使用单个数据库。

    这样会更好,因为您需要维护的代码更少,在给定情况下不会尝试访问错误的数据库,而且代码会更惯用 - 即使用多个数据库没有任何好处,所以如果您是要使用多个数据库,任何阅读您的代码的人都会花费大量时间试图找出您这样做的原因。

    【讨论】:

    • 感谢您的回答!这个错误可能是因为我没有正确关闭每个活动/片段中的游标或整个数据库吗?
    • 错误信息说数据库在编译你的查询SELECT MAX(_id) FROM null时遇到了错误。我会让你弄清楚为什么那个 SQL 语句是无效的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    相关资源
    最近更新 更多