说我有三张桌子。
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。
答案 0 :(得分:2)
由于所有内容都遵循严格的one-to-many relationship
,因此您对问题的原始处理方法是正确的。因此无需引入两个映射表。
然而,在这样的场景中出现了问题。许多供应商提供的成分以及供应商提供多种成分,创建many-to-many relationship.
然后您的方法是映射表的首选解决方案。
我已经提供了一个外部资源供您参考。希望这会有所帮助。
答案 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)