简单而正确的方法来链接和添加列到数据库表,数据库设计

时间:2012-01-24 09:13:52

标签: sql database database-design ms-access

我有以下表格。

产品,具有以下属性:

  • ProductID<<产品ID
  • ProductName<<产品名称
  • ProductPrice<<产品价格
带有以下属性的

食谱

  • RecipeID<<食谱指数
  • ProductID<<多个productID和/可以重复
  • ingredientID<<多个成分ID,但对于特定产品ID是唯一的
  • productAsIngredientID<<有时产品本身可以作为一种成分。例如。发髻(它可以作为面包独立出售或者可以添加到汉堡食谱中)
  • ingredientAmount<<数量(双/ int)

成分,具有以下属性:

  • ingredientID<<它是原料成分列表,例如(面粉)
  • ingredientName
  • ingredientUnitType<<它所拥有的单位类型(例如,gm,ml等)

上表中的Sampel数据库:

PRODUCT:

|   ProductID    |    ProductName    |   ProductPrice   | 

       12             Bun                     1.5
       15             Ham Burger              5
       13             Chicken Burger          7

成分:

|    ingredientID    |      ingredientName         |   ingredientUnitType   |          

         1                   Salt                           gm
         2                   Yeast                          gm
         3                   Refined Wheat Flour            gm
         4                   Milk                           ml
         5                   Chicken Meat                   gm
         6                   Onion                          gm
         7                   Tomatoes                       gm 

配方:

| RecipeID | ProductID | ingredientID  |  productAsIngredientID  |  ingredientAmount  |

     1          13                               12                         1
     2          13           5                                             20
     3          13           6                                              7
     4          13           7                                             10
     5          12           1                                              5
     6          12           2                                              2
     7          12           3                                             10
     8          .            .
     9          .            .
配方表中的

,ProductID不能等于同一行中的productAsIngredientID。但是在表Recipe中,productID和productAsIngredientID都链接到Product.ProductID。

但是将上述两个表与productID链接起来存在问题。如果我链接它们,它们都不能具有空值或任何不在成分或产品表中的值。

我使用Microsoft Access(MDB)作为数据库 请建议我一个正确的方法来完成这项工作。如何将产品项目本身组织为一种成分本身。

1 个答案:

答案 0 :(得分:1)

您要求的是如何在表之间创建多对多关系。

这是由一个单独的“链接表”完成的,其中包含来自其他两个表的Id(在您的情况下,我们将在成分链接表中添加另一列,金额。

因此架构看起来像这样(我更喜欢没有tablename作为前缀的属性):

<强>产品

  • 编号
  • 产品名称
  • 价格
  • 单元

<强>成分

  • 编号
  • IngredientName
  • 单元

<强>配方

  • 编号
  • RecipeName中

<强> RecipeProducts

  • RecipeId(外键:Recipe.Id)
  • ProductId(外键:Product.Id)
  • 金额

<强> RecipeIngredients

  • RecipeId(foreing key:Recipe.Id)
  • IngredientId(外键:Ingredient.Id)
  • 金额

这就是我通常会如何布局架构,但我对Access并不熟悉。

这是我从访问查询向导获取的所有配料

SELECT Ingredient.IngredientName, RecipeIngredients.Amount, Ingredient.Unit
FROM Ingredient 
INNER JOIN RecipeIngredients 
ON Ingredient.[ID] = RecipeIngredients.[IngredientId] 
WHERE RecipeIngredients.RecipeId = 1;

不是最好的SQL,我想有人可以提供更聪明的方法来获取食谱的产品和成分。

productAsIngredientId 不应该是必要的,因为当产品是配方的一部分时,它将成为一种成分,对吗?否则你需要将表名更改为更符合逻辑的名称。