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,
  -- ...
)

しかし、次の問題があります。

アプリケーション ロジックは、1 つの場所にある 1 つのビジネスの 1 つのアイテムに複数の価格を設定でき (この時点では、その理由はあまり重要ではありません)、それらの価格の 1 つを公式価格にすることができます。価格ですが、ある場合は1つしかありません。

問題は次のとおりです。データの整合性を確保するためにこれをモデル化する方法は?


私の最初のアイデアは、追加のテーブルを作成することでした:

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

このテーブルは、公式の価格の priceId:s を保持し、PK/UNIQUE 制約が「1 つまたは 1 つもない」制約を処理します。

これは実行可能な解決策のように思えますが、この状況を処理するためのより良い方法があるかどうかまだ疑問に思っていますか?

4

2 に答える 2

0

あなたはこの汚いハックを使うことができます:

  1. is_officialテーブルにフィールドを追加しpriceます。値としてnullが可能です。
  2. 一意の複合インデックスを作成するpriceId + is_official
  3. に置かれた公式価格のため1is_official
  4. 公式ではないのでnull
于 2011-03-06T14:23:17.067 に答える
0

テーブルに公式価格のみを保持させ (数値は null の可能性あり)、( 、、 )priceに一意の制約を設定し、 を参照する補助価格の別のテーブルを追加することができます。businessIditemIdlocationIdpriceId

于 2011-03-06T14:31:36.623 に答える