【问题标题】:Do we need primary key on table referencing two other table?我们需要在表上引用另外两个表的主键吗?
【发布时间】:2014-01-31 08:57:23
【问题描述】:

我有一个包含ProductTypeID, BrandID, SupportedBatteryID 列的表,其中存储了特定产品支持的batteryIDs。

这里的列都不是唯一的,那么我需要在这类表上使用主键吗?

如果我要添加一个主键,它会在使用产品 ID 搜索特定产品的电池时提高性能吗?

【问题讨论】:

  • 除非有候选键,否则您不能拥有键。话虽如此,好的表设计规定每条记录都有一个键。在这种情况下,我怀疑整个记录是一个多列候选键 - 因此可以用作 PK。 (但您需要更详细地查看 - 或讨论 - 数据。)无论如何,键不会提高性能 - 索引可以。但是 PK 通常也是一个聚集索引。在这种情况下,可能会在 ProductTypeID 上添加一个 非键 索引以帮助查询,如果它尚未作为第一列包含在聚簇 PK 中。
  • @DeepakKumarPadhy 是一对多还是一对一的关系,我的意思是对于 productId 是否仅支持单个 BatteryID 或特定 ID 可以支持多个电池?
  • @SurajSingh:单个产品支持多个电池,所以产品id不能为主键
  • @DeepakKumarPadhy 您可以在三列上使用复合键,这将有助于删除重复值并可能提高搜索性能,请尝试使用 Sql Profiler 来比较性能。

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


【解决方案1】:

您可以在 (ProductId, SupportedBatteryId) 上构建聚集索引。 这将帮助您无需创建主键

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    相关资源
    最近更新 更多