【发布时间】:2012-07-20 21:11:23
【问题描述】:
不使用复合主键(此表维护代表两个实体[两个表]的两个表之间的关系),建议设计以identity列作为主键并强制执行唯一数据约束超过两列,代表实体主键中的数据。
对我来说,每个关系表都有标识列违反了规范化规则。
- 行业标准是什么?
- 在对此做出设计决策之前需要考虑哪些因素?
- 哪种方法合适?
【问题讨论】:
-
复合键专业人士的简单文章:weblogs.sqlteam.com/jeffs/archive/2007/08/23/…
-
不需要标识列,主键基本上是一组列(1 个或多个),用于唯一定义您的数据。通过添加一个标识列,您正在添加一个额外的索引,并使您可能会使用最多的索引(具有 2 个重要列的索引)作为非聚集索引,加上更新/插入会稍微慢一点,等等。 . 基本上不用了。
-
@RThomas - 在那个博客中,他们使用了一个客户->产品关系,它不应该有一个复合键,因为它表示交易数据。 可以在不同时间创建多个关系,该表需要唯一标识 PKey。例如,订购同一 SKU 下的葡萄酒瓶 - 由单个 ProductID 引用 - (不理想,但可能)。但是,如果每个瓶子都有自己的 ID,那么“订单限制”就没有实际意义,因为您必须为每件商品创建单独的交易记录。要么你构建的结构错误,要么你不正确地跟踪数据。
标签: tsql