SQL Server表设计 - 不希望两条记录相同

时间:2010-03-04 17:30:55

标签: sql sql-server

我的数据库中的一个表有三列。

他们是dt_id(PK),dt_name(varchar)和u_id(FK)。

dt_id是一个标识列。

但我希望dt_name每个用户只能使用一次。

所以你只能输入“dt_name ='CC',u_id = 1”一次。

如何设置dt_name列?

----编辑:----

对不起,我会更好地解释..

dt_it只是桌面上的一个id。 dt_name是值字段 u_id是用户的id。

我希望能够在每个用户上添加唯一的dt_name,因此u_id = 1只能拥有值'CreditCard'一次。但是u_id = 2也可以拥有它,但只有一次......

希望这清除一点...... 我正在使用MSSQL

4 个答案:

答案 0 :(得分:3)

为“dt_name”添加唯一索引。

create unique index ix_dt_name on your_table(dt_name)

[编辑]不完全确定你在问什么;如果你想要名字和组合的组合id是唯一的,您将在两个列上创建唯一索引:

create unique index ix_dt_name_and_id on your_table(dt_name, u_id)

答案 1 :(得分:3)

CREATE UNIQUE NONCLUSTERED INDEX IX_UniqueNamePerUser ON tab
(
   dt_name, u_id
)

答案 2 :(得分:1)

只需在(u_id,dt_name)

上创建一个唯一索引
CREATE UNIQUE INDEX ix_u_id_dt_name on mytable(u_id,dt_name)

答案 3 :(得分:0)

据我所知,您只希望dt_name在数据库中显示一次“CC”。如果是这种情况,您需要在DataBase中创建一个触发器来实现此目的。

CREATE TRIGGER trigger_name
ON { table | view }
[ WITH ENCRYPTION ]
{
 { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
    [ WITH APPEND ]
    [ NOT FOR REPLICATION ]
    AS
    [ { IF UPDATE ( column )
        [ { AND | OR } UPDATE ( column ) ]
            [ ...n ]
    | IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )
            { comparison_operator } column_bitmask [ ...n ]
    } ]
    sql_statement [ ...n ]
 }
} 

link text

该链接解释了所有这些的使用。因此,您可以在输入行之前进行检查以查看名称是否存在。如果是,则在触发器中运行第二个脚本。

编辑**

其他代码更有效。但触发器仍然有效。但是,如果其他人更适合我,我将不会继续深入研究它。祝你好运。