如何在不使用 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)
);
我需要使 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)
);