如何在 Android 中设置数据库(表)以在它们之间执行搜索

How to set up databases (tables) in Android to perform searches between them

编辑

我了解到我可能不需要多个数据库,而是该数据库中的多个表。

我现在拥有的 我正在构建一个将处理食谱的应用程序。目前,我有一个储物柜,您可以在其中添加您想要的物品。例如,这可能是一包碎牛肉或一条面包或类似的东西。我让用户在应用程序中添加它,具体取决于他们 locker/fridge/freezer 中的内容。我正在这样做,使用 SQLiteDatabase。一切都按我希望的方式运行,但现在,我想添加更多功能。

我想达到的目标

好的,所以在我的应用程序中,我有一个搜索按钮。当用户想要搜索时,他应该能够输入一种成分(如碎牛肉),然后收到包含碎牛肉的食谱的结果。他还应该能够搜索菜谱,然后找到该菜谱,或与他输入的菜谱相似的菜谱。

场景 1。用户搜索一种成分。

应该发生什么 用户应该得到包含该特殊成分的所有食谱的结果。当用户找到他喜欢的食谱时,他应该能够点击它,应用程序应该显示他家里有哪些食材以及他需要购买哪些食材。

场景 2。用户搜索或食谱

应该发生什么。用户获得与他的搜索相匹配的食谱结果。如果他点击一个,他应该显示他拥有的成分(如场景 1),他需要购买的成分也应该显示,也如场景 1。

问题

我应该如何尽可能高效地(在执行时间方面)设置数据库,以便能够通过一次搜索显示来自不同数据库的信息。我发现这个 http://www.databaseanswers.org/data_models/recipes/index.htm,我猜我需要多个数据库。 我不需要帮助编写设置阶段的代码,而只需要如何设计数据库的结构。

提前致谢。

您不需要多个数据库来存储应用程序模型的对象。您可能需要考虑为您的应用程序使用以下(或类似的)域模型 classes 并在数据库中具有相应的 tables:

public class Recipe {
    int id;
    String name;
    String source; // Mom, A friend's name, A website url, a magazine name, etc.
    Date lastUpdated; // When the recipe was added/updated
    ArrayList<Ingredient> ingredients; // A list of ingredients used by this recipe 
}

public class Ingredient {
    int id;
    String name;
    String preferredSources; // a store name, a friend's name :), etc.
    ArrayList<Recipe> recipes; // A list of recipes which use this ingredient
}

public class RecipeIngredient { // Join class for many-to-many relationship
   int recipeId;
   int ingredientId;
}

public class Inventory {
    int ingredientId;
    int location; // locker, fridge, freezer, etc.
    float quantity; // in weight, count, etc.
    Date lastUpdated; // When the last replenishment was done
}

由于您在 Recipe 和 Ingredient 对象之间存在 many-to-many 关系,我建议创建一个连接 class RecipeIngredient。库存 class 用于您目前在家中拥有的食材。

您的搜索可能针对食谱和成分 classes (tables)。获得相应的 ingredientId(s) 后,您可以在您的库存中搜索这些成分在家中的可用性。

购买成分物品后,您应该更新库存 class (table)。另外,当一种原料用完后,你应该更新它的库存数量。

为了简化开发工作,包括为您的应用创建自动数据库架构 (tables),您可以考虑使用像 JDXA. Here are some code snippets 这样的 ORM 来处理与 JDXA 的 many-to-many 关系。