Sql 如何使用不同数量的特定类型的外键设置表

Sql 如何使用不同数量的特定类型的外键设置表,sql,sql-server-2014,Sql,Sql Server 2014,假设我有三张桌子 MenuItem(MenuItemID{PK}, MenuItemName, MenuItemIngredient) Ingredient(IngredientID{PK}, IngredientName, SupplierID) Supplier(SupplierID{PK}, SupplierName) MenuItem表中的每个MenuItem都可以包含多种成分。 配料表中的每种配料都可以有多个供应商 我目前的做法是增加两张桌子 MenuIngredientLink

假设我有三张桌子

MenuItem(MenuItemID{PK}, MenuItemName, MenuItemIngredient)

Ingredient(IngredientID{PK}, IngredientName, SupplierID)

Supplier(SupplierID{PK}, SupplierName)
MenuItem表中的每个MenuItem都可以包含多种成分。 配料表中的每种配料都可以有多个供应商

我目前的做法是增加两张桌子

MenuIngredientLink(MenuItemID{PK}, IngredientID{FK})

IngredientSupplierLink(IngredientID{PK}, SupplierID{FK})
然后删除菜单项和配料表上的最后一列

不过,这似乎不是一个好办法

还有别的选择吗

对SQL来说是相当陌生的,因此任何帮助都将不胜感激


使用Microsoft SQL Server 2014。

由于所有内容都遵循严格的
一对多关系
,因此您最初解决该问题的方法是正确的。因此无需引入两个映射表

然而,在这样的场景中会出现一个问题。一个成分由多个供应商提供,而一个供应商提供多个成分,从而创建了一种
多对多关系。
那么,您的映射表方法是首选解决方案

我已经包括了一个外部来源供您参考。希望这有帮助


我们可以按照您的指定使用外键创建表。如果从供应商表开始,则应插入所有必需的值,并且该表没有外键,因此没有限制。接下来,将值插入配料表,因为它需要供应商的外键。最后,将值插入MenuItem表,因为它有一个指向配料的外键。您可以先创建表,然后像我在下面写的那样添加外键

--Suppliers does not have any foreign keys
CREATE TABLE Supplier (SupplierID int PRIMARY KEY, SupplierName varchar(100))

--Ingredients has a foreign key to Supplier(SupplierID)
CREATE TABLE Ingredient (IngredientID int PRIMARY KEY
                       , IngredientName varchar(100)
                       , SupplierID int)
ALTER TABLE Ingredient ADD FOREIGN KEY (SupplierID) REFERENCES Supplier(SupplierID)

--MenuItem has a foreign key to Ingredient(IngredientID)
CREATE TABLE MenuItem (MenuItemID int PRIMARY KEY
                     , MenuItemName varchar(100)
                     , MenuItemIngredientID int)
ALTER TABLE MenuItem ADD FOREIGN KEY (MenuItemIngredientID) REFERENCES Ingredient(IngredientID)