在SQL Server 2008中允许重复的唯一标识符吗?

4
假设我的数据库中只有两个表,这两个表分别是:InputType 和 HardwareType。每个表都使用 GUID 作为它们的主键。在 InputType 表中有一个外键指向 HardwareType 表。
我遇到的问题是:在 InputType 表中会有多行数据引用 HardwareType 表中的同一行数据(即每种硬件类型都有多个输入)。问题在于,我在 InputType 表中引用 HardwareType 表中 GUID 的列不允许重复,因此不允许每种硬件类型有多个输入。
我可能可以通过将 InputType 表中该列的数据类型设置为 "varchar" 或其他类型而绕过此问题,但是我必须这样做吗?是否有某种方法可以允许在不是主键而是另一个表的外键时 GUID 具有重复条目?
感谢您的帮助!谢谢。

不,uniqueidentifier 的本质就是不允许重复的条目。如果不唯一,那就不要将其标记为唯一。 - Femi
仅仅因为数据类型是UNIQUEIDENTIFIER并不意味着您不能多次在其中具有相同的值!您可以这样做 - 当然了,除非您已经显式地在该列上添加了UNIQUE CONSTRAINTUNIQUE INDEX - marc_s
1
太好了。这正是我想要听到的。在“索引/键”部分找到了一个“唯一”标志。现在我可以像需要的那样输入重复项到uniqueidentifier字段中。感谢@marc_s! - ImGreg
1个回答

9

即使数据类型为UNIQUEIDENTIFIER,也并不意味着您不能在该列中多次拥有相同的值!

实际上,您可以 - 当然,除非您明确添加了UNIQUE CONSTRAINTUNIQUE INDEX在该列上 - 这是您的选择,但默认情况下没有应用任何内容,除非您自己采取行动。

因此,您应该能够使用UNIQUEIDENTIFIERInputType引用HardwareType - 即使InputType中的多行将引用HardwareType中的同一行 - 没有任何问题。


1
你还应该阅读@marc_s在类似问题上的帖子,以获取有关在SQL Server中使用GUID作为键的更多建议。https://dev59.com/oHA75IYBdhLWcg3w_ef1 - RThomas
1
那也很有用。谢谢大家! - ImGreg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接