数据库中包含可变数量的字段

时间:2016-01-12 04:48:41

标签: mysql sql database relationship normalization

注意:这是一个帮助自学的个人项目,不涉及工作或上学。

我是创建/数据库的新手,我正在寻找有关如何设计最合理的桌面关系的见解。

提供一些背景信息:我想设计一个可容纳不同酒精饮料的数据库,如鸡尾酒,啤酒,葡萄酒等。数据库将包含饮料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

我非常感谢所提供的任何见解,谢谢。

3 个答案:

答案 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