0

SQLにはアイテムのテーブルがあります。アイテムは複数の価格を持つことができます。しかし、私がデータを使用するようになると、ほとんどの場合、日付で見つけることができる currentPrice だけが必要になります。

私の質問: 価格に 2 つの関係があるのは間違っているでしょうか。項目は currentPrice およびすべての価格と関係があります。私のmvcの複雑さを防ぐために、この種の問題の解決策はありますか. 私は現在、現在の価格でviewModelを使用していますが、データベースでこれを処理できれば、私には良いようです。(そうでない場合は教えてください)。

注: item テーブルの前に価格テーブルを作成する必要があり、item テーブルについても同様に作成する必要があるため、この正確な方法ではうまくいかないと思います。しかし、これは私の問題を示しています。

助けてくれてどうもありがとう。

CREATE TABLE Item.Items
(
    ItemId INT NOT NULL 
        CONSTRAINT PK_Items_ItemId 
        PRIMARY KEY
        IDENTITY,
    --------------------------------------------------
    --CurrentPriceId INT NOT NULL
        CONSTRAINT FK_Prices_Items
        FOREIGN KEY REFERENCES Item.Items (ItemId),
    --------------------------------------------------
    Name VARCHAR(100) NOT NULL,
    Points INT NOT NULL DEFAULT 0,
    Description VARCHAR(5000) NULL
)

CREATE TABLE Item.Prices
(
    PriceId INT NOT NULL 
        CONSTRAINT PK_ItemPrices_ItemPriceId
        PRIMARY KEY
        IDENTITY,
    ItemId INT NOT NULL
        CONSTRAINT FK_ItemPrices_Item
        FOREIGN KEY REFERENCES Item.Items (ItemId),
    EffectiveDate DATETIME NOT NULL,
    Value MONEY NOT NULL
)
4

2 に答える 2

1

より良いでしょう:

CREATE TABLE Item.Items
(
  ItemId INT NOT NULL 
      CONSTRAINT PK_Items_ItemId 
      PRIMARY KEY IDENTITY,
  --------------------------------------------------
  CurrentPrice MONEY NOT NULL,  -- optional optimization, redundant as
                                -- current price is available from item.Prices
  --------------------------------------------------
  Name VARCHAR(100) NOT NULL,
  Points INT NOT NULL DEFAULT 0,
  Description VARCHAR(5000) NULL
)

CREATE TABLE Item.Prices
(
   ItemId INT NOT NULL
      CONSTRAINT FK_ItemPrices_Item
      FOREIGN KEY REFERENCES Item.Items (ItemId),
   EffectiveUtc DATETIME NOT NULL,
   Price MONEY NOT NULL,
   Constraint [ItemPricesPK] PRIMARY KEY CLUSTERED 
   (
      [ItemId] ASC,
      [EffectiveUtc] ASC
   )
)

@popovitz が述べたように、相関サブクエリを使用して、特定の日付の価格をいつでも取得できます...

Select i.name, p.price 
From Item.Items i
   Join Item.Prices p 
      ON i.ItemId = p.ItemId
Where p.EffectiveUtc = 
   (Select Max(EffectiveUtc ) 
    From Item.Prices
    Where ItemId = i.ItemId 
       And EffectiveUtc <= @asOfDate)
于 2014-05-04T15:11:16.957 に答える