注意:这是一个帮助自学的个人项目,不涉及工作或上学。
我是创建/数据库的新手,我正在寻找有关如何设计最合理的桌面关系的见解。
提供一些背景信息:我想设计一个可容纳不同酒精饮料的数据库,如鸡尾酒,啤酒,葡萄酒等。数据库将包含饮料ID,名称,描述等字段,最后,成分。
我遇到的问题是试图围绕饮料中含有多种成分的逻辑。例如,一种鸡尾酒可能只有2种成分,而另一种可能有4,5,6等。
到目前为止,我已经创建了这个设计(从我的观点来看,它看起来并不合乎逻辑,并且在试图找出存储信息的最佳方式时遇到了困难)。
**Drinks table**
Drink ID
Drink name
Drink description
Drink category // Beer, Cocktails,
Drink type // Pale ale, Lager, etc.
**Cocktails Table**
Drink ID
Drink instructions
**Beers Table**
Drink ID
**Ingredients Table**
Ingredient id
Ingredient name
我非常感谢所提供的任何见解,谢谢。
答案 0 :(得分:0)
删除鸡尾酒和啤酒表。这些只是不同的饮料,您可以在Drink表中添加“说明”字段以获取鸡尾酒。 Ingedients表是处理成分的正确方法。我只是数字字段的数量和文本字段的测量(即:2盎司)
答案 1 :(得分:0)
如果您想将鸡尾酒定义为成分列表,您需要一个CocktailIngredient
表来描述您的成分,并需要一个Ingredient
“交叉表”,其中说明了每种成分的含量鸡尾酒需要:
id name
-- ------
1 vodka
2 Kahlua
3 Cream
...
表:
Cocktail
id name
-- -------------
1 Black Russian
2 White Russian
表:
CocktailIngredient
现在对于最有趣的部分,c_id i_id parts
---- ---- -----
1 1 5
1 2 2
2 1 5
2 2 2
2 3 3
表:
c_id = 1
最后一张表中说“黑俄罗斯”(i_id=1
)采用伏特加的五部分(i_id = 2
)和两部分的卡赫卢(void getList(@Path("data") String data,//
Callback<OrderList> callback);
)。
注意:如果你能从上表中找出“白俄罗斯”的比例,你已经理解了多对多的解决方案。
答案 2 :(得分:0)
我会选择:
**Drinks table**
ID
name
description
category_id //foreign key to a category table
type_id //foreign key to a type table
**Category** //Beer, Cocktails, etc
ID
Name
**Type** //Pale ale, Lager, etc.
ID
Name
**Ingredients** //Hold all ingredients
Id
description
**Category_Ingredients** //That category has ingredients
category_id
Ingredient_id
amount //if you want be perfectionist
这将允许您拥有定义良好的数据。你可以专门研究饮料,比如客户喜欢某种特定成分,你可以在饮料成分中添加一个表格,如:
**Drink_ingredient**
id_drink
id_ingredient
amount