Php 具有指向其他表中行的链接的SQLTable

Php 具有指向其他表中行的链接的SQLTable,php,mysql,sql,database,Php,Mysql,Sql,Database,我想实现一个食谱数据库。一张桌子上应该放着菜谱及其单位,另一张桌子上应该放着菜谱。但不知何故,我不知道如何实现它。disks表中的一个条目包含一个dish的名称和ingredents表中的几个ID,这些ID带有一个因子(double),表示该ingredent的单位数 现在我的问题是,如何才能使一道菜的条目包含多个带有ingredentID和factor的条目?我建议您使用3个表格: 菜肴(包含菜肴id、名称和一些一般信息) Ingredents(所有现有Ingredents的列表) Recip

我想实现一个食谱数据库。一张桌子上应该放着菜谱及其单位,另一张桌子上应该放着菜谱。但不知何故,我不知道如何实现它。disks表中的一个条目包含一个dish的名称和ingredents表中的几个ID,这些ID带有一个因子(double),表示该ingredent的单位数


现在我的问题是,如何才能使一道菜的条目包含多个带有ingredentID和factor的条目?

我建议您使用3个表格:

  • 菜肴(包含菜肴id、名称和一些一般信息)
  • Ingredents(所有现有Ingredents的列表)
  • Recipiec(表中有3列:盘id、ingredent id和该ingredent的编号应用于当前盘)

  • 所以每道菜都有几行:每道菜一行。

    你至少还需要一张桌子

    dish
    -----
    dish_id
    name
    other_things
    
    dish_ingredient
    ----------------
    dish_id
    ingredient_id
    amount
    order?
    mixing_instructions?
    other_stuff
    
    ingredient
    -----------
    ingredient_id
    other_stuff
    

    基本上,您可以为此创建三个具有多对多关系的表

    所有食谱的列表

    CREATE TABLE RecipeList
    (
        RecipeID INT, 
        RecipeName VARCHAR(50),
        -- .... other fields,
        CONSTRAINT tb_pk PRIMARY (RecipeID),
        CONSTRAINT tb_uq PRIMARY (RecipeName),
    )
    
    所有成分的清单

    CREATE TABLE IngredientList
    (
        IngredientID INT, 
        IngredientName VARCHAR(50),
        -- .... other fields,
        CONSTRAINT tb_pk1 PRIMARY (IngredientID),
        CONSTRAINT tb_uq1 PRIMARY (IngredientName),
    )
    
    还有一张桌子,上面放着每种食谱的配料

    CREATE TABLE IngredientList
    (
        IngredientID INT, 
        RecipeName INT,
        Amount INT,
        Units INT,
        InnerAmountInGrams DECIMAL(10,2),
        -- .... other fields,
        CONSTRAINT tb_pk3 PRIMARY KEY (IngredientID, RecipeName),
        CONSTRAINT tb_fk1 FOREIGN KEY (RecipeID) 
            REFERENCES  RecipeList(IngredientID),
        CONSTRAINT tb_fk2 FOREIGN KEY (RecipeName) 
            REFERENCES IngredientList(IngredientID),
    )
    

    很好,但我需要每个ingredent的统一单位,因为我想在购物清单中汇总ingredent。带有相同ingredent的解决方案条目的Atm可以有不同的单位。但是如果我想总结一下,例如,千克和克不应该混合。但是很好的方法,谢谢。啊,你可以通过添加额外的列来调整你的表,该列保存单位的转换值,见我的更新答案。您可以看到有一个列名,
    InnerAmountInGrams
    。在这一列中,您需要插入换算成克数的
    数量
    单位
    ,因此,在您的情况下,如果您已在
    InnerAmountInGrams
    中插入
    1千克
    ,您将把
    1000
    放在那里。因此很容易对值进行求和
    :D