java - 如果模型包含另一个列表模型,如何设计数据库 SQLITE

标签 java android sqlite orm

我的应用程序需要将 Model_A 存储到 SQLITE 数据库中,并且 Model_A 包含一个 Model_B 的 ArrayList,正如我在下面的示例代码中所描述的:

class Model_A {
    String name;
    String description;
    int number;
    List<Model_B> list_Model_B;
}

class Model_B {
    String title;
    int quantity;

}

我搜索并知道我可以使用 GSON(或 JSONObject)将 Model_B 转换为 json 字符串文件并将此 json 存储在 Model_A 的表中。但是这种方式不利于处理数据。我只想在不使用 GSON 的情况下这样做。 我考虑过为 Model_A 和 Model_B 创建两个表。 Model_A 的表将存储 Model_B 的列 ID。但是这种方式只能存储一个对象Model_B,而不是我期望的List。

你能告诉我如何设计数据库才能达到我的期望吗?或者请给我推荐一个可以帮助我解决这个问题的图书馆。谢谢。

最佳答案

根据关系数据库理论,您需要建立一对多关系,使用两个表 - 第一个用于Model_A,第二个用于模型_B。 这种关系的主要思想是将两个实体与外键 连接起来,以便进行查询。 让我们编写一些 SQL 来创建这样的关系:

CREATE TABLE model_a (
    _id INTEGER PRIMARY KEY, 
    field TEXT NOT NULL 
);

-- Table for Model_B
CREATE TABLE model_b (
    _id INTEGER PRIMARY KEY, 
    model_a_id INTEGER NOT NULL, 
    field_2 TEXT NOT NULL, 
    FOREIGN KEY model_a_id REFERENCES model_a(_id) 
);

好的,我们创建了两个表。但是我们怎样才能得到List<Model_B>从这样的计划? 有两种方法可以做到这一点。 第一个 - 对每个 Model_A 进行两次选择类对象:一个来自 model_a 的这个对象的“细节”表,一个用于 Model_B 的列表元素:

SELECT *
FROM model_a
WHERE _id = ? 

-- For list of Model_B
SELECT *
FROM model_b
WHERE model_a_id = ? 

第二种方式——获取关于一个Model_A的所有信息通过一个查询。对于这个任务,我们需要特殊的 SELECT查询:

SELECT *
FROM model_a ma
    INNER JOIN model_b mb ON (ma._id = mb.model_a_id) 
WHERE (mb.model_a_id = ?) 

希望对您有所帮助。

关于java - 如果模型包含另一个列表模型,如何设计数据库 SQLITE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34367835/

相关文章:

java - 面向组件的软件和设计

java - XmlHttp 内容序列化程序按字母顺序对字段进行排序

android - 如何在android中以编程方式创建表格行和列边框

android - 如果我只有 APK,如何更改 Bundle ID

ios - 如何在swift中加密sqlite数据

java - SQLite 帮助 - 如何显示新 Activity 的分数

java - 使用 Spring Data JPA 的自定义查询返回自定义对象

java - 加载位图时应用程序 UI 变得无响应

javascript - SqlStorage Ionic 2 作为服务/提供商

java - 在应用程序中的任何设备上使用相同的 SQLite 数据库数据