为什么数据库中需要UNIQUE约束?
你能提供任何例子吗?
默认情况下,主键是UNIQUE ...可以理解,因为它们在其他表中被称为外键...需要关联它们来连接rdbms平台...
但为什么将其他列称为UNIQUE,这样做有什么好处?)
答案 0 :(得分:3)
应尽可能使用约束以确保数据库符合预期。在这种特殊情况下,唯一约束对于确保数据质量最有用。
对电子邮件地址列有用的唯一约束MIGHT,例如,它要求没有两行具有相同的电子邮件地址 - 虽然它不是PK,并且通常会被允许更改。
如果您对唯一性有所期望,并且该值尚未受到PK或类似因素的约束,那么与添加唯一约束相比,可以确保始终保留您的假设。
一般来说,约束也可以be used by the optimizer。
Celko关于约束的系列文章的第二篇文章特别关注unique constraints。
答案 1 :(得分:3)
当某些东西是主键时,我不希望它发生变化 - 它应该是静态的,因为它用于链接到数据库中的其他表。如果您的“主键”将更改(例如,用户名),那么它应该是表中的附加字段,而主键应该是某种递增ID。
但是,您仍然不能拥有两个具有相同用户名的用户 - 在这种情况下,保证有唯一约束。
答案 2 :(得分:2)
用户名是唯一的,但不是PK。 UserId是PK。
答案 3 :(得分:2)
PK和UQ之间存在一些差异。 PK可以没有NULL值,其中UQ可以具有1个空值(Oracle允许多个NULL值)。 每个表只能有1个PK,但每个表可以有多个UQ 默认情况下,PK是聚类的(但不一定是)
答案 4 :(得分:1)
在设计数据库的大多数时候,我们将主键保留为Identity Field。尽管将其作为身份字段是有意义的,但它可能无法解决实现唯一性的问题。为了确保该行是唯一的,我们在列上放置了一个唯一约束(因为Andrey指定了一个UserNane)。这就是MSDN所说的:
您可以使用UNIQUE约束来确保在不参与主键的特定列中不输入重复值。尽管UNIQUE约束和PRIMARY KEY约束都强制实现唯一性,但如果要强制实施不是主键的列或列组合的唯一性,请使用UNIQUE约束而不是PRIMARY KEY约束。
HTH
答案 5 :(得分:1)
如果要求数据是唯一的,那么您需要一个唯一约束。否则你会得到糟糕的数据。 PK必须是唯一的,但这并不意味着其他数据也不必是唯一的。也许每条记录必须有一个唯一的日期时间,这不太可能是PK,但必须以某种方式强制执行。
特别是如果您使用PK的代理键(我强烈推荐),那么您希望确保自然键字段是唯一约束的一部分,以避免重复数据。
查找类型数据也是如此。假设您有一个专业的专业人员列表,供用户在输入数据时可以选择,并假设他们也可以根据需要添加到此列表中。一个独特的约束将阻止肿瘤科医生多次进入,当您想要真正找到肿瘤科医生的人数时,这将更容易。
答案 6 :(得分:0)
emailID可以是唯一的。
uniqueID 和主键之间的区别是唯一支持整个列中的单个null,但PK不会。