【发布时间】:2014-02-16 09:34:31
【问题描述】:
在 SQL Server 2012 中,我有一个包含四列的“交叉引用”表。四列的组合必须是唯一的。我最初的想法是简单地创建一个包含所有四列的主键,但一些研究表明这可能不是一个好主意。
问题背景... 我正在尝试在旧版 Web 应用程序上实现标记服务。一些需要标记的对象使用唯一标识符作为它们的主键,而另一些则使用简单的整数 id。我已经使用“双表”方法解决了这个问题。一个表包含标签,而另一个表提供要标记的对象和标签表之间的引用。这张表我有名字 TagList...
CREATE TABLE TagList (
TagId nvarchar(40) NOT NULL,
ReferenceGuid uniqueidentifier NOT NULL,
ReferenceId int NOT NULL,
ObjectType nvarchar(40) NOT NULL
)
例如,要使用带有单词“example”的 uniqueidentifier 主键标记对象,TagList 记录将如下所示:
TagList (
TagId 'example',
ReferenceGuid '1e93d578-321b-4f86-8b0f-32435d385bd7',
ReferenceId 0,
ObjectType 'Customer'
)
要使用带有单词“example”的整数主键标记对象,TagList 记录将如下所示:
TagList (
TagId 'example',
ReferenceGuid '00000000-0000-0000-0000-000000000000',
ReferenceId 5639,
ObjectType 'Product'
)
实际上,TagId 和 ReferenceGuid 列必须是唯一的,或者,如果正在定义一个 int 主键对象,则 TagId、ReferenceId 和 ObjectType 必须是唯一的。
为了简化(?)事情,使所有四列的组合是唯一的也将用于相同的功能目的。
任何建议将不胜感激。
【问题讨论】:
-
ObjectType 与参考 guid 和参考 id 有什么关系?让我知道这两列是否存在对象类型的任何功能依赖关系?
-
在定义方面,在定义具有唯一标识符主键的对象时,对象类型并不是严格必要的。当使用整数主键定义对象时,对象类型将一个 id 与另一个区别开来,例如例如,ID 27 可以指代产品或客户,对象类型定义了哪一个。对象类型也用于标签搜索:查找标签为“示例”的所有客户
标签: sql sql-server tags indexing