MYSQL数据库结构 - 存储多个值

时间:2014-04-06 16:03:38

标签: mysql types

我对新的数据库结构有一些疑问。

1。假设用户可以创建配方。每个食谱显然都有几种成分。每种成分都有以下4个字段。

1. ingredients
2. quantity of ingredients
3. unit size of the ingredients
4. prep method for the ingredients

我一直绞尽脑汁想弄清楚如何构建这个。我应该简单地创建四行并将每个输入包含到一个数组中并将其存储在它所属的行中吗?什么是最好的方法,最有效的?

2. 如果您有一个描述字段和路线字段,其中字符的长度未知,那么blob类型最好在这里吗?

谢谢!

4 个答案:

答案 0 :(得分:1)

ingredients table
-----------------
id
name


users table
-----------
id
name


recipes table
-------------
id
user_id
prep_method


recipe_ingredients table
------------------------
recipe_id
ingredient_id
quantity
unit

答案 1 :(得分:1)

对于#2 - 通常你会使用TEXT字段。 BLOBS通常用于存储二进制数据。 MySQL有几种不同的文本类型 - 您必须考虑理论上限,并选择合适的文本类型。

答案 2 :(得分:1)

由于您的食材可以出现在许多食谱中,不同的食谱可以包含相同的成分,因此食谱和食材之间会有N:N的关系。

另一方面,你有所谓的关系属性所以我会尝试这样的事情:

  • 食谱表:食谱
  • Igredients表:成分
  • 食谱 - 有 - 成分关系:存储在表格中: HAS_INGREDIENT 其中:数量单位大小预方法< / em>是字段,其中 RECIPES 主键和 INGREDIENTS 主键是外键。

考虑以下ER图:

enter image description here

答案 3 :(得分:1)

我实际上刚刚开始研究涉及此问题的学习项目,作为我的食品室库存跟踪系统的一部分。

问题1:

我们有一个食谱,其中包含许多成分,许多方向,以及各种其他属性,例如服务烹饪时间等。数据库中的成分是他们自己的表(模型),他们引用(在我的应用程序中,我不知道这与您有关)我的食品室中存在的项目。以下是我的模型的基本要点:

class Recipe < ActiveRecord::Base

  ####################
  #   Database Rows:
  #     id            -> integer
  #     name          -> string
  #     description   -> string
  #     directions    -> serialized string, array
  #     servings      -> integer

  serialize :directions

  # Relations
  has_many :ingredients

end

对我来说,将方向作为字符串数组使用是最直接的解决方案。 ActiveModel将整个数组作为单个字符串存储在单个列中,并使用serialize辅助方法将其转换为应用程序内的数组。我不确定你是否使用Rails,所以这可能没有帮助。

class Ingredient < ActiveRecord::Base

  ######################
  # Database Rows:
  #   id           -> integer
  #   quantity     -> decimal
  #   measurement  -> string
  #   inventory_id -> integer

  # Relations
  belongs_to :recipe
  has_one :inventory

end

更明确地说,在数据库中,有表“食谱”和“成分”。单个配方将在成分表中引用许多行。配方存储它包含的成分列表。

问题2:

根据this,我们正在考虑字符串列的8,000字节限制。这足以满足您的需求吗?你决定。如果您认为该描述太小,则可以更改行类型。您可以将方向存储在单独的表中,以便每个方向都具有8,000字节的限制。这些是漫长的方向,但是......

我的项目是here,如果你想要四处寻找或任何东西。它还在进行中。