多个主键约束?

时间:2017-11-14 09:49:04

标签: sql-server tsql

我有一张这样的表:

 handleImageClick() {
        this.setState({ imageDetails : JSON.stringify(this.props.imageDetails,null,"\t")});
        console.log(this.state.imageDetails)
        this.setState({ selectedReceiptDetails: true }); //Toggles the modal. 
    }



//Modal that sets this.state.selectedReceiptDetails to the body



function mapStateToProps(state) {
    return {
        receiptDetails: state.services.receiptDetails,
        imageDetails: state.services.imageDetails
    }
};

export default connect(mapStateToProps, { getImageDetails })(ReceiptService);

我已经在CAEN_KEY列上定义了主键。我还需要将CAET_KEY和BUUN_KEY的唯一记录放在一起。 (因此,只允许与CAET_KEY / BUUN_KEY相同的组合一次)。最简单的方法是生成一个复合主键,但这是不可能的,因为sql server不允许多个主键约束。有什么替代品?

请注意:我无法删除CAEN_KEY上的主键约束。

4 个答案:

答案 0 :(得分:3)

尝试使用唯一键。更改设计如下

CREATE TABLE BACAEN
(
CAEN_KEY INT PRIMARY KEY,
CAET_KEY INT  NOT NULL,
BUUN_KEY INT  NOT NULL,
CONSTRAINT uq_BACAEN UNIQUE(CAET_KEY , BUUN_KEY );
)

现在,CAET_KEY和BUUN_KEY列都将具有唯一的组合,并且它们不能保留NULL值,因为我已将它们指定为NOT NULL

如果想要允许CAET_KEY和BUUN_KEY的NULL值,那也没关系,但在两个字段中只能有1条带NULL的记录

答案 1 :(得分:1)

ALTER TABLE youtablename  ADD CONSTRAINT uq_yourtablename UNIQUE(CAET_KEY , BUUN_KEY );

PS。如果已填充表,请确保删除与此约束冲突的所有条目。

答案 2 :(得分:1)

使用以下查询在表格上创建新的唯一索引

CREATE UNIQUE INDEX IDX_Composite_index  ON BACAEN (CAET_KEY,BUUN_KEY);

即使填充了表,但上面的查询仍然有效但不应该重复。

答案 3 :(得分:0)

在桌面上创建唯一索引

CREATE UNIQUE INDEX indexname  ON BACAEN (CAET_KEY,BUUN_KEY);