SQL表 - 半独特的行?

时间:2010-01-08 08:43:00

标签: sql structure unique

我有一个基本上具有以下结构的SQL表:

PK (int, primary key), userID (int), data (varchar 64)

基本上,userID定义的任何用户都可以存储任意数量的短字符串。但是,不允许用户存储两个相同的字符串(尽管用户1和用户2都可以分别存储相同的字符串)。如果可能的话,我想在数据库级别实现这个限制,因为IMHO结构约束应该总是在表中,以及插入/读取表中的数据。< / p>

我唯一能想到的是添加第三列,其中我在每次插入时连接userID和数据,并调用那个列唯一,但这对我来说似乎太“hacky”。如果你们中的一个人有更好的方法可以让我把这个约束放在字段上,我愿意完全重组我的表格。)

谢谢!
马拉

5 个答案:

答案 0 :(得分:5)

听起来您需要在userID和数据列上使用复合唯一约束。

像这样:

CONSTRAINT my_contraint_name UNIQUE ([userID], [data])

答案 1 :(得分:3)

如果我们对UserId和Data有唯一约束,该怎么办?我希望它能解决你的问题。

答案 2 :(得分:2)

你想要一个复合键,你可以在MySQL中将它添加到你的表tablename中:

ALTER TABLE `tablename` ADD UNIQUE KEY (`userID`, `data`);

答案 3 :(得分:1)

我认为最简单的解决方案是创建索引

create unique index ui on table (userID, data)

虽然这可能会产生开销。

这种看起来应该是你的主键,尽管这实际上取决于PK和userId在整个模式的其余部分中在表中扮演的角色。

答案 4 :(得分:0)

我认为复合键可以完成任务。使用UserId和数据列创建复合键。在这种情况下,当用户尝试多次插入相同的数据时,它将抛出错误,您可以在应用程序中捕获该错误并向用户显示相应的错误消息。

希望它有所帮助...

感谢。