如何设置具有不同数量的特定类型的外键

时间:2017-10-23 07:30:25

标签: sql sql-server-2014

说我有三张桌子。

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})

然后删除MenuItem和Ingredient表上的最后一列。

尽管如此,这似乎并不是一个好方法。

任何替代方案?

相当新的SQL,所以任何帮助将不胜感激。

使用Microsoft SQL Server 2014。

2 个答案:

答案 0 :(得分:2)

由于所有内容都遵循严格的one-to-many relationship,因此您对问题的原始处理方法是正确的。因此无需引入两个映射表。

然而,在这样的场景中出现了问题。许多供应商提供的成分以及供应商提供多种成分,创建many-to-many relationship.然后您的方法是映射表的首选解决方案。

我已经提供了一个外部资源供您参考。希望这会有所帮助。

Managing Database Relationships

答案 1 :(得分:0)

我们可以按照您的指定制作带有外键的表。如果从“供应商”表开始,则应插入所需的所有值,并且没有外键,因此您没有任何限制。接下来,将值插入到“成分”表中,因为它需要供应商的外键。最后,您将值插入MenuItem表,因为它具有Ingredient的外键。您可以先创建表,然后再按照下面的说明添加外键。

--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)