1

我有一个描述其他两种商业模式关联的表格。

例子:

Construction Table - available constructions |
Reader Table - available readers |
ReaderPlacement Table - reader assigned to specific construction for specific time.

根据我的要求ReaderPlacement表必须包含ApiKey,对我来说最好的匹配是唯一的GUID,以后用于 WCF 通信。

我打算写这样的东西:

ApiKey CHAR(36) NOT NULL DEFAULT NewSequentialId()

这是正确的解决方案吗?我读到这NewSequentialId()NewId()而且应该是独一无二的。

db 引擎是否会在我使用时保护我的列是唯一的,NewSequentialId()或者我必须添加任何约束和额外的检查?

它也必须对 SQL Azure 有效。

干杯,丹尼尔

4

1 回答 1

1

仅仅通过定义一个默认值newsequentialid(),并不能保证你不会有重复。是 - SQL Server 生成的值极有可能是唯一的。但是该默认约束不会阻止您插入显式值 - 并且这些值可能与现有值发生冲突。

如果您的列ApiKey需要始终唯一,则必须添加唯一约束

ALTER TABLE dbo.ReaderPlacement
ADD CONSTRAINT UC_ReaderPlacement_ApiKey UNIQUE(ApiKey)

有了这个独特的约束(肯定也适用于 SQL Azure),SQL Server 将阻止插入任何重复项——任何试图这样做的事务都将被终止并显示错误消息。

于 2012-05-18T14:38:58.003 回答