【问题标题】:Is it a good idea to use a computed column as part of a primary key?将计算列用作主键的一部分是个好主意吗?
【发布时间】:2010-05-04 08:40:37
【问题描述】:

我有一个表定义为:

OrderID bigint NOT NULL,
IDA varchar(50) NULL,
IDB bigint NULL,
[ ... 50 other non relevant columns ...]

此表的自然主键是 (OrderID,IDA,IDB),但这不可能,因为 IDA 和 IDB 可以为空(它们都可以为空,但它们永远不会同时定义) .现在我对这 3 列有一个独特的约束。

现在,我需要一个主键来启用事务复制,我面临两个选择:

  • 创建一个标识列并将其用作主键
  • 创建一个非空计算列 C,其中包含 IDA 或 IDB,如果两列都为空,则为 '',并使用 (OrderID,C) 作为我的主键。

作为我的 PK 的第二种替代接缝清洁器将是有意义的,并且是可行的(请参阅 msdn link),但由于我从未在任何地方看到这样做,我想知道它们是否对这种方法有些不利。

【问题讨论】:

    标签: sql sql-server-2008 primary-key


    【解决方案1】:

    可以为 null 的列不能作为 pk 的一部分,因为 pk 也必须是唯一的。

    PK 也不应该是有意义的,因为值的含义可能会改变。

    表 A 和 B 有关系吗?查看关系数据模型。设计中可能有错误。

    OrderID 应该是唯一的,因此足以进行 PK。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 2010-11-05
      • 2019-11-11
      • 2017-12-18
      相关资源
      最近更新 更多