Database 不带分隔值的数据库结构

Database 不带分隔值的数据库结构,database,database-design,android-sqlite,Database,Database Design,Android Sqlite,我正在创建一个应用程序来管理食谱,并希望将我的数据存储在数据库中。主要问题是创建适当的数据库结构 程序中我的对象的结构是: ________________________________ |Recipe | |--------------------------------| |-String recipeName; | |-List<Ingredient> ingredients; | |-List&l

我正在创建一个应用程序来管理食谱,并希望将我的数据存储在数据库中。主要问题是创建适当的数据库结构

程序中我的对象的结构是:

 ________________________________
|Recipe                          |
|--------------------------------|
|-String recipeName;             |
|-List<Ingredient> ingredients;  |
|-List<String> methodSteps;      |
|________________________________|
 ___________________________
|Ingredient                 |
|---------------------------|
|-String ingredientName;    |
|-Float ingredientAmount;   |
|-String ingredientUnit;    |
|___________________________|
________________________________
|配方|
|--------------------------------|
|-字符串recipeName|
|-列出成分|
|-列出方法步骤|
|________________________________|
___________________________
|配料|
|---------------------------|
|-字符串IngreditName|
|-浮动轴承座|
|-字符串输入单元|
|___________________________|
该程序存储一个列表。每个配方可以包含用户希望的任意多个成分和方法步骤,并且两者都必须大于0并包含有效数据

我不想在数据库中保存逗号分隔的值,所以我不知道如何创建一个遵循第一范式的有效数据库。有很多信息说,我同意不要在记录中使用CSV,只是不知道如何实现我想要的(或者不知道查找我需要的信息的关键搜索词)

如何将其转换为数据库结构?(可以添加一些键值以正确实现数据库

最终,它将作为Android应用程序运行,因此将在Java代码中使用SQLite来管理它


感谢您提供的帮助!

不要在db表中放置逗号分隔的值

其实很简单:当有多个X与给定的Y相匹配时,你创建两个表,一个为X,一个为Y。然后每个X必须有一个将其与Y关联的引用

在这种情况下,您应该首先考虑3个表:

Recipe
  recipe_id (probably an auto-assigned sequential number)
  name

Ingredient
  ingredient_id
  recipe_id
  name
  amount
  unit

MethodStep
  methodstep_id
  recipe_id
  sequence
  text
请注意,配料和MethodStep都包含一个配方id,因此您可以将它们绑定到它们所属的配方

select name, amount, unit from ingredient where recipe_id=?
其中“?”替换为适当的配方编号

我在MethodStep上设置了一个“序列”,因为我认为这些步骤必须按照正确的顺序进行

select sequence, text from methodstep where recipe_id=? order by sequence
我想再多做一步,为度量单位创建一个单独的表

Unit
  unit_id
  name

然后,不用在每个成分记录中输入单位名称,而是输入单位id。这样做的好处是:(a)它为所有单位名称提供了标准化的拼写,以及(b)现在,您可以将有关单位的附加信息添加到单位表中,而无需在每个成分记录中重复该信息。例如,您可以给出公制当量。或者记录与其他单位的关系,例如一汤匙中的茶匙数。然后,如果您要更改数量,您可以让程序自动调整重复并调整单位,比如说“30茶匙”而不是“10茶匙”或者不管有多少杯子或其他什么。

非常感谢!看起来是一个非常合理的结构,有很好的解释。有了你提出的结构,我确信我能够将我的对象从代码保存到数据库,并从数据库加载!希望在全部实现后能得到反馈。