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

时间:2015-08-20 12:13:12

标签: mysql sql psql

我需要为def update @user = User.friendly.find(params[:id]) @page_has_darker_background = true if @user.update(user_params) redirect_to user_show_path_helper(@user), :notice => params['user']['finish_signup'] ? t('created') : t('update') else render 'edit' end end 的每个条目设置唯一Preference属性。我无法使用(RobberID)约束执行此操作,因为可能存在多个具有相同UNIQUE的记录。如果不将它包含在主键中,有没有办法做到这一点?

Preference

编辑:仅对RobberID有用,而不是(RobberID,SkillID)。

2 个答案:

答案 0 :(得分:3)

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

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

因此,三列的组合必须是唯一的。

答案 1 :(得分:2)

您可以在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)
);