FOREIGN KEY如何从一个表引用到两个表?

时间:2014-11-19 03:41:14

标签: sql database-design foreign-keys

当我为生产设计数据库时,我遇到了问题。 我有5个表的Product,SemiProduct,BOOM,BOOM_Details,Material。

Product(Code,Name,BOOM_Code,etc....)
SemiProduct(Code,Name,BOOM_Code,etc...)
BOOM(BOOM_Code,etc...)
BOOM_Details(ID,BOOM_Code,Component, Percent)
Material(Code,Name, etc..)

每张桌子的数据是:

Product
{Pro1,Product1, BOOMPRO1}
{Pro2,Product2, BOOMPRO2}

-----------
SemiProduct
{SemiPro1,Semi Product1, BOOMSemi1}
{SemiPro2,Semi Product2, BOOMSemi2}

------------
BOOM
{BOOMPRO1}
{BOOMPRO2}
{BOOMSemi1}
{BOOMSemi2}

----------

Material
{M1,Material1}
{M2,Material12}

---------------

BOOM_Details
{1,BOOMPRO1,M1, 20}
{2,BOOMPRO1,M2, 25}
{3,BOOMPRO1,SemiPro1, 25}
{4,BOOMPRO1,SemiPro2, 30}
{5,BOOMPRO2,M1, 20} 
{6,BOOMPRO2,M2, 25} 
{7,BOOMPRO2,SemiPro1, 55} 

问题是[BOOM_Details]中的col [Component]。 它可以是材料代码或SemiProduct代码。 请帮我从组件参考创建FOREIGN KEY到[Material]。[Code]和[SemiProduct]。[Code] 或者向我展示一种不同的方式来设计具有类似数据的表格。

非常感谢!

2 个答案:

答案 0 :(得分:1)

这是一种常见的SQL反模式。您应该更改表结构,以便您的Material和SemiProduct代码表具有一个列,该列是BOOM_Details表的外键。这样,您可以根据需要随时在表之间进行连接。

因此,BOOM_Details中的一个字段可以指向两个表中的任何一个,而是在两个表中都包含一个字段,该字段包含BOOM_Details表的主键,并且受外键约束的约束。

答案 1 :(得分:0)

Foriegn key: - FOREIGN KEY是一个用于连接两个表的列。它指向我们需要加入的另一个表中的PRIMARY KEY。以下是更好理解的例子。

Read this for better understanding

出现问题: - 这里需要Boom_details和Material之间的外键。首先,你必须确保有一个主键(例如:-id列,顺序号.id [1,2,3] ,4,5]或连续字母[a,b,c,d]等...)在我们必须指向的第一个表格中!然后在表中添加我们所指向的外键列,并在第一个表中使用相同的值集作为主键。

修改: -


以下是了解如何跨多个表使用外键的链接

LINK 1

LINK 2

希望这有帮助!