如何在不使用 UNIQUE 的情况下使其主键集的属性唯一

How to make an attribute unique for its primary key set without using UNIQUE

我需要使 Preference 属性对于 (RobberID) 的每个条目都是唯一的。我无法使用 UNIQUE 约束来执行此操作,因为可以有多个记录具有相同的 Preference。有什么方法可以做到这一点而不将其包含在主键中吗?

CREATE TABLE info.HasSkills (
    RobberID    INTEGER,
    SkillID     INTEGER,
    Preference  INTEGER NOT NULL UNIQUE, --problem (table was created already without UNIQUE)
    PRIMARY KEY(RobberID, SkillID),
    FOREIGN KEY(RobberID) REFERENCES info.Robber(RobberID)
    FOREIGN KEY(SkillID) REFERENCES info.Skills(SkillID)
);

编辑:仅对 RobberID 唯一,对(RobberID、SkillID)不唯一。

您可以为多个字段创建唯一索引。

CREATE UNIQUE INDEX index1  ON info.HasSkills (RobberID, SkillID,Preference  )

所以三列的组合必须是唯一的。

您可以在 create table 语句中执行此操作,也可以通过显式创建索引(两者做同样的事情):

CREATE TABLE info.HasSkills (
    RobberID    INTEGER,
    SkillID     INTEGER,
    Preference  INTEGER NOT NULL, --problem
    PRIMARY KEY(RobberID, SkillID),
    FOREIGN KEY(RobberID) REFERENCES info.Robber(RobberID)
    FOREIGN KEY(SkillID) REFERENCES info.Skills(SkillID),
    CONSTRAINT unq_RobberId_SkillId_Preference UNIQUE (RobberId, Preference)
);