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

标签 sql sql-server-2014

假设我有三张 table 。

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。

最佳答案

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

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

我提供了一个外部来源供您引用。希望这会有所帮助。

Managing Database Relationships

关于sql - 如何设置具有不同数量的特定类型外键的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46884000/

相关文章:

SQLCMD 传入变量

mysql - 根据MySQL中另一个表的数据自动更新列中字段的数量

.net - SQL物理连接不可用

c# - 无法打开,因为是852版本,本服务器支持782及更早版本

sql-server - 在没有 xp_cmdshell 的情况下以代理用户身份从存储过程执行 SSIS 包

mysql - 当 WHERE 子句与该列进行比较时,不使用 TIMESTAMP 列上的索引

python - 如何创建和序列化非托管模型 Django

mysql - SELECT DISTINCT 不同值的组合,加上非不同值?

error-handling - 如何在SSIS中保留错误和文本错误的数量?

sql-server - SQL Server Management Studio 2014 : Unable to view stored procedures on Azure SQL Database V12