【问题标题】:How to store multiple data in SQLite Database using two tables?如何使用两个表在 SQLite 数据库中存储多个数据?
【发布时间】:2015-07-12 22:37:07
【问题描述】:

假设有两个表 TABLE 1 和 TABLE 2。表 1 有两列 - 活动和测量。 Activity 列中存储了 3 个项目 - Football、Soccer 和 Basketball。 (现在让我们先不考虑测量列存储了什么)。

现在,我想做的是,在另一张表 TABLE 2 上,我希望将 Activity 列中的三个项目作为 TABLE 2 的列。这是我想要的布局喜欢 -

https://www.dropbox.com/sh/6ip5ipe8r4y25bx/AACp43UfpxI21wGg4y6nylUEa?dl=0

抱歉,对于 Dropbox 链接,如果没有 10 个或更多的声誉,我显然无法发布图片。

我是 Android Studio 的新手,所以我在实现这个想法时遇到了困难,如果有任何方法/想法可以实现它,请告诉我!谢谢!

【问题讨论】:

  • “我希望将 Activity 列中的三个项目作为 TABLE 2 的列” 这听起来像是一个糟糕的表格设计。我建议你想一个更好的解决方案,或者在这里暴露问题,以便我们对你的问题给出更充分的建议。

标签: java android database sqlite android-studio


【解决方案1】:

我认为最好有一个外键关系而不是每次都创建一个新列,因为如果前一列不能为空,则在添加新列时会遇到问题。对于您的情况,我将创建一个类似的表这个

物品表

活动表

数据表

我将使用项目表的 ID 作为活动表和数据表的外键,因此您无需在每次决定放置新项目时创建新列。但是如果你不想用我推荐的方法,你也可以尝试用sql更改数据库表。尝试阅读this

【讨论】:

  • 在我看来,这是一个比 OP 要求的关系数据库更好的设计。
  • 我绝对同意这是一个更好的 DB 设计。为每个项目生成一个 ID 是一种更好的方法。非常感谢!我从来没有想过使用外键的想法。我得好好看看。谢谢!
【解决方案2】:

从你的问题很难理解你是否只想创建你描述的结构:

String QUERY_CREATE_TABLE_1 = "CREATE TABLE Table1 + ( Activity, Measurement )";
String QUERY_CREATE_TABLE_2 = "CREATE TABLE Table2 + ( Football, Soccer,  Basketball )";

database.execSQL(QUERY_CREATE_TABLE_1);
database.execSQL(QUERY_CREATE_TABLE_2);

或者,如果您需要动态逻辑,那么最好使用不同的方法。
为 Table1 中插入的每一行创建一个带有活动名称的新表:

//called when database first created
public void createTable1() {
    String QUERY_CREATE_TABLE_1 = "CREATE TABLE Table1 + ( Activity, Measurement )";
    database.execSQL(QUERY_CREATE_TABLE_1);
}

public void addNewActivity(String activity, String measurement) {

    //Add new activity to Table 1
    ContentValues valuesTable1 = new ContentValues();
    valuesTable1.put("Activity", activity);
    valuesTable1.put("Measurement", measurement);
    database.insertOrThrow(TablesInfo.TABLE_NAME, null, valuesTablesInfo);

    //create A new Table with activity name
    String QUERY_CREATE_TABLE = "CREATE TABLE " + activity + " ( Name )";
    database.execSQL(QUERY_CREATE_TABLE);
}

【讨论】:

  • 这是一个糟糕的数据库设计。假设我想要查询表 1 中列出的所有活动的所有团队,您将如何编写这样的查询?或者例如,我将如何获得所有测量值 > 0 的团队?这样的查询显示了这种设计是如何存在缺陷的。我知道 OP 是专门问这个的,但在这种情况下,OP 显然选择了错误的设计,你应该纠正他/她。
  • 正如我所说,他的问题不是很具体,所以我没有考虑不同的情况。如果用户将提供更多详细信息,我将编辑我的答案并可能改变方法。
  • 正如我所说,目前的方法有缺陷,你应该告诉 OP,即使他/她要求这种方式。对于“所有活动的所有球队的查询”,我的意思是列出一个返回“包装工队、野马队、熊队、曼联队、阿森纳队、切尔西队、公牛队、尼克斯队、马刺队”的查询(顺便说一句,它是“尼克斯队”)。
  • 是的,现在我明白了。 @Lopht Ghost 设计更适合此目的,但我们仍然不知道该数据库将用于什么用途。
  • 是的,最初我选择了这种方法,但是 Lopht Ghost 给出了更好的建议。虽然,您对动态逻辑的想法还不错,但就像提到的 m0skit0 一样,为此编写查询实际上很困难,并且展示了一个有缺陷的设计!
猜你喜欢
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
  • 2021-06-02
  • 2013-01-21
  • 2011-12-02
  • 2023-03-08
相关资源
最近更新 更多