这是在这种特定情况下确保数据完整性的良好解决方案吗?

时间:2011-03-06 14:20:57

标签: mysql integrity

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

每个价格都有一个参考商品,一个销售该商品的商家以及该商品的销售地点。现在,通常,这样做会很好:

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约束将处理'一个或所有'约束。

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

2 个答案:

答案 0 :(得分:0)

你可以使用这个肮脏的黑客:

  1. 将字段is_official添加到price表,null,因为其中可以包含值
  2. 创建唯一的综合索引priceId + is_official
  3. 1is_official
  4. 的官方价格
  5. 因为没有官方留下它null

答案 1 :(得分:0)

您可以使price表仅保留官方价格(数字可能为空),对(businessIditemIdlocationId)设置唯一约束,并添加另一个引用priceId的辅助价格表。