如何在 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 关系。
编辑
我了解到我可能不需要多个数据库,而是该数据库中的多个表。
我现在拥有的 我正在构建一个将处理食谱的应用程序。目前,我有一个储物柜,您可以在其中添加您想要的物品。例如,这可能是一包碎牛肉或一条面包或类似的东西。我让用户在应用程序中添加它,具体取决于他们 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 关系。