我有一个数据库表,其中包含uniqueidentifier
类型的非空列。这是在不久的将来使用的。但是现在,我需要使用一些占位符。我可以简单地使用:
00000000-0000-0000-0000-000000000000
对于所有行,直到将来插入新行时使用真正的guid? SQL Server是否在此列上强制实现唯一性?
答案 0 :(得分:7)
SQL Server将强制执行唯一性 IF ,并且仅当您在该字段上放置唯一约束或唯一索引时。否则,SQL Server将仅强制该值必须为NOT NULL。
答案 1 :(得分:2)
正如marc_s所说,你可以这样做,因为即使在没有显式声明的唯一索引/约束的表的同一列中,uniqueidentifiers也不会强制执行唯一性(毕竟,两行可以合法地具有相同的外键)。
IF 这只是一个临时的引导程序,并且将来只允许真正的GUID(NOT NULL),我认为这是一个好的解决方法,以避免生成只需要的GUID稍后更换,因此不需要保留单独的部分初始化标志列或临时行的表,以便稍后可以填写相应的GUID。
然而,从设计的角度来看,我更关心这个特殊保留GUID的语义,以及为什么允许一个特殊的保留值是正常的,但是NULL不是。就像我说的,如果它只是暂时的并且处于稳定状态,你不希望永远允许NULL OR 这个特殊的保留0,那很好,但是如果你要继续允许这个特殊的在稳态操作中保留GUID,我认为这引发了设计问题。
它是否意味着成为外键?如果是这样,可以使用NULL(但是保留的键值,如0,不在引用的表中)。如果它是一个松散的关联,那么在这个表中存储GUID可能不是一个好的设计。