当我为生产设计数据库时,我遇到了问题。 我有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] 或者向我展示一种不同的方式来设计具有类似数据的表格。
非常感谢!
答案 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]等...)在我们必须指向的第一个表格中!然后在表中添加我们所指向的外键列,并在第一个表中使用相同的值集作为主键。
修改强>: -
以下是了解如何跨多个表使用外键的链接
希望这有帮助!