0

我正在开发一个跟踪某些商品价格的应用程序。

每个价格都有一个项目的参考,销售该项目的企业,以及该项目的销售地点。现在,通常情况下,这会很好:

CREATE TABLE `price` (
  `priceId` INT UNSIGNED NOT NULL AUTO_INCREMENT, -- PK
  `businessId` INT UNSIGNED NOT NULL,
  `itemId` INT UNSIGNED NOT NULL,
  `locationId` INT UNSIGNED NOT NULL,
  `figure` DECIMAL(19,2) UNSIGNED NOT NULL,
  -- ...
)

但我有以下问题:

应用程序逻辑是这样的,一个地点的一个企业的一个项目可以有多个价格(在这一点上,为什么并不重要),其中一个价格可以是官方价格 - 一个项目不必有官方价格价格,但如果确实如此,则只能有一个。

问题是;如何对此建模以确保数据完整性?


我最初的想法是创建一个额外的表:

CREATE TABLE `official_price` (
  `priceId` INT UNSIGNED NOT NULL -- PK + FK (references price.priceId),
  -- ...
)

该表将保存官方价格的 priceId:s,并且 PK/UNIQUE 约束将处理“one-or-none”约束。

这似乎是一个可行的解决方案,但我仍然想知道是否有更好的方法来处理这种情况?

4

2 回答 2

0

您可以使该price表仅包含官方价格(该数字可能为空),对 ( businessId, itemId, locationId) 设置唯一约束,并添加另一个参考价格的辅助价格表priceId

于 2011-03-06T14:31:36.623 回答
0

你可以使用这个肮脏的技巧:

  1. is_official向表中添加一个字段price,null 作为其中的值是可能的
  2. 创建唯一的复合索引priceId + is_official
  3. 对于官方1价格is_official
  4. 因为不是官方的null
于 2011-03-06T14:23:17.067 回答