【问题标题】:Foreign key contraints in a table on two columns referncing a same table表中引用同一个表的两列上的外键约束
【发布时间】:2014-02-13 05:07:57
【问题描述】:

我有一个项目主表,其中我有一个主键作为项目代码

tbl_item_master

itm_code int PK

物料清单(tbl_Bom)

child_id 整数 parent_id int

我有另一个物料清单表(tbl_bom),其中有 2 列父项和子项,它们的值不是项目主控的主键。即 BOM 中的父子 ID 来自 Item Master 的主键。 Follwoing 是我用来在子级和父级上应用外键的脚本。

CREATE TABLE dbo.BOM_MASTER
(
    BOM_SrNo                     INT CONSTRAINT DF_BOM_MASTER_BOM_SrNo DEFAULT ((0)) NOT NULL,
    BOM_Key                      INT NOT NULL,
    PD_Key                       INT,
    BOM_Level                    INT,
    BOM_Parent_Code              VARCHAR (50),
    BOM_Child_Code               VARCHAR (50),
    BOM_UOM                      INT,
    BOM_Qty                      DECIMAL (14, 2),
    BOM_Final_Version            INT,
    BOM_ItemDimension_Applicable BIT,
    BOM_MatType                  INT CONSTRAINT DF__BOM_MASTE__BOM_M__192BAC54 DEFAULT ((0)) NOT NULL,
    CONSTRAINT FK_BOM_MASTER_Project_Details_Master FOREIGN KEY (PD_Key) REFERENCES dbo.Project_Details_Master (PD_Key),
    CONSTRAINT FK_BOM_MASTER_tbl_itm_master FOREIGN KEY (BOM_Parent_Code) REFERENCES tbl_itm_master (BSL_COST_ITEM_Item_SAP_Code),
    CONSTRAINT FK_BOM_MASTER_tbl_itm_master FOREIGN KEY (BOM_Child_Code) REFERENCES tbl_itm_master (BSL_COST_ITEM_Item_SAP_Code)
)
GO

我收到以下错误

无法创建两个名为“FK_BOM_MASTER_tbl_itm_master”的约束。不允许重复的约束名称。严重性 16

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    如果添加换行符,问题就会变得明显。

    CREATE TABLE dbo.BOM_MASTER
    (
        BOM_SrNo INT CONSTRAINT DF_BOM_MASTER_BOM_SrNo DEFAULT ((0)) NOT NULL, 
        BOM_Key INT NOT NULL, 
        PD_Key INT, 
        BOM_Level INT, 
        BOM_Parent_Code VARCHAR (50), 
        BOM_Child_Code VARCHAR (50), 
        BOM_UOM INT, 
        BOM_Qty DECIMAL (14, 2), 
        BOM_Final_Version INT, 
        BOM_ItemDimension_Applicable BIT,
        BOM_MatType INT CONSTRAINT DF__BOM_MASTE__BOM_M__192BAC54 DEFAULT ((0)) NOT NULL, 
        CONSTRAINT FK_BOM_MASTER_Project_Details_Master FOREIGN KEY (PD_Key) REFERENCES dbo.Project_Details_Master (PD_Key), 
        CONSTRAINT FK_BOM_MASTER_tbl_itm_master FOREIGN KEY (BOM_Parent_Code) REFERENCES tbl_itm_master (BSL_COST_ITEM_Item_SAP_Code), 
        CONSTRAINT FK_BOM_MASTER_tbl_itm_master FOREIGN KEY (BOM_Child_Code) REFERENCES tbl_itm_master (BSL_COST_ITEM_Item_SAP_Code)
    )
    GO
    

    最后 2 个名称相同。很明显还有其他命名问题。 DF__BOM_MASTE__BOM_M__192BAC54 是什么?该表的未来用户能否从这个命名中看出点什么?

    【讨论】:

    • 我试过了,但我收到以下错误。引用表 'tbl_itm_master' 中没有与外键 'FK_BOM_MASTER_tbl_itm_master' 中的引用列列表匹配的主键或候选键。严重性 16 无法创建约束。请参阅以前的错误。严重性 16
    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多