我有以下表格。
产品,具有以下属性:
食谱:
成分,具有以下属性:
上表中的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)作为数据库 请建议我一个正确的方法来完成这项工作。如何将产品项目本身组织为一种成分本身。
答案 0 :(得分:1)
您要求的是如何在表之间创建多对多关系。
这是由一个单独的“链接表”完成的,其中包含来自其他两个表的Id(在您的情况下,我们将在成分链接表中添加另一列,金额。
因此架构看起来像这样(我更喜欢没有tablename作为前缀的属性):
<强>产品强>
<强>成分强>
<强>配方强>
<强> RecipeProducts 强>
<强> RecipeIngredients 强>
这就是我通常会如何布局架构,但我对Access并不熟悉。
这是我从访问查询向导获取的所有配料
SELECT Ingredient.IngredientName, RecipeIngredients.Amount, Ingredient.Unit
FROM Ingredient
INNER JOIN RecipeIngredients
ON Ingredient.[ID] = RecipeIngredients.[IngredientId]
WHERE RecipeIngredients.RecipeId = 1;
不是最好的SQL,我想有人可以提供更聪明的方法来获取食谱的产品和成分。
productAsIngredientId 不应该是必要的,因为当产品是配方的一部分时,它将成为一种成分,对吗?否则你需要将表名更改为更符合逻辑的名称。