0

我正在为一家商业商店建立一个数据库。我正在讨论在数据库中使用 productID。

我还需要将交易历史存储在数据库中。

使用 productID 或使用条形码作为我的产品的唯一标识符会更好吗?

4

3 回答 3

4

你可以同时使用不是吗?没有理由产品不应该有超过一种类型的标识符。然而,视情况而定,一个产品可能有多个条形码。对于零售包装商品,同一产品具有多个不同条形码的情况并不少见。

于 2013-08-21T21:58:48.470 回答
2

一般来说,条形码将是一个糟糕的 PK。由于它们将存储为的数据类型,您不想加入它们。对于任何有子表的表来说,产品 ID 可能是一个更好的选择。但是,您可能仍然应该在条形码上放置一个唯一索引,没有什么能阻止拥有唯一索引的东西。

于 2013-08-21T20:00:25.507 回答
2

你基本上有两个选择:

  1. 在PRODUCT 表中只有自然键(条形码)。
  2. 在PRODUCT 表中同时具有自然键 ( barcode )代理键 ( id )。

在第一种情况下:

  • PRODUCT 表将“更小”(因为只有一个索引)。索引维护将减少,缓存将更有效。
  • 条形码将被迁移到所有子表1,因此您不必加入 PRODUCT 来获取条形码
  • 但出于同样的原因,子表会“更胖”(因为barcodeid更胖)。它们将占用更多空间并且缓存效率较低。

在第二种情况下:

  • PRODUCT 表会更胖(因为它上面有额外的字段和索引)。
  • 子表必须与 PRODUCT 连接才能获得条形码。
  • 但是子表会更苗条。

因此,它基本上是在更少或更多 JOIN 之间以及“底部重”或“顶部重”存储/缓存之间进行权衡。您只需要决定哪个更适合您预期的数据访问模式...


1即通过 FOREIGN KEY 引用 PRODUCT 的表。TRANSACTION_HISTORY 可能是此类表的一个示例。

于 2013-08-22T09:23:12.933 回答