0

州 (st_id,st_name)
地区 (d_id,d_name,st_id[FK])
製品 (pid,pnme)
価格 (max_price,min_price,pid[FK],d_id[FK])

ここに画像の説明を入力

1.) これは私のテーブル構造です。5 つの州とその地区の製品の価格を表示したいのですが、価格表では地区ごとに製品 (10 以上) を繰り返しています。

私の価格tblの何が問題なのですか?それを正規化するアイデアを教えてください..

2.) 現在、日付スタンプ (開始日) フィールドを価格 tbl に追加して、過去の価格リストを維持できるようにすることを計画していますが、各日付で製品 (以下に示すように) を繰り返さずにそれを行うにはどうすればよいですか? tbl 行を減らすためのより良い解決策

_______________________________________
product| price |district|date(mm/dd/yy)| 
_______|_______|________|______________|
fan      200   delhi    3/15/2013
speaker  400   delhi    3/15/2013
fan      210   chenni   3/15/2013
speaker  403   chenni   3/15/2013
fan      200   delhi    3/16/2013
fan      210   chenni   3/16/2013
4

3 に答える 3

1

1) テーブルの設計に大きな問題はありません。ただし、製品 1 と地区 111 が繰り返されているため、サンプル データは意味を成しません。pid と d_id で複合主キーを作成することをお勧めします。

2) 繰り返しますが、テーブルのデザインに大きな問題はありません。変更がある場合にのみデータを入力することを検討して、特定の日付の価格を取得すると、目的のデータの前の最後のレコードが検索されます。これにより、テーブルのサイズが縮小されます。

一般的なポイント: 命名規則を選択し、それに従ってください。pid と d_id (アンダースコアのあるものとないもの) を使用します。一般的に、私はよりわかりやすい列名を好みますが、一貫性が重要です。

また、データが冗長でない限り、大きなテーブルに問題はありません。あなたのデザインには冗長性がないようです。

于 2013-03-15T16:30:10.247 に答える
1

1.) これは私のテーブル構造です。5 つの州とその地区の製品の価格を表示したいのですが、価格 tbl では地区ごとに製品 (10 以上) を繰り返しています。

すべての製品をこれらすべての地区で提供しており、製品が販売されている地区によって価格が異なる場合は、地区ごとに製品を繰り返すことが理にかなっています.

私の価格tblの何が問題なのですか?それを正規化するアイデアを教えてください..

価格表に適切主キーがないようです。

これらの線に沿ってテーブルを作成した場合。. .

create table prices (
  district_id integer not null references districts (district_id),
  product_id integer not null references products (product_id),
  primary key (district_id, product_id),
  min_price numeric(14,2) not null,
  max_price numeric(14,2) not null
);

製品の最小価格と最大価格が地域によって異なると仮定すると、5NF にテーブルが作成されます。しかし、あなたのサンプルデータはおそらくそれに収まりませんでした.

于 2013-03-15T16:36:09.523 に答える
0

1) 価格 (価格帯) テーブルで (d_id, pid) が繰り返される理由がわかりません。テーブルに発効日の列を配置しない限り、価格帯は 1 つだけにする必要があります。

2) 将来の価格表、現在の価格表、および過去の価格表を作成できます。これにより、事前に価格変更を入力し、現在の価格表を短く保ち、必要なときに過去の価格を頻繁に取得することができます。アプリケーション コードは、これらの価格表間の関係を維持します。

州と地区を定義したため、他の価格表の都市がどこから来たのかわかりません。

于 2013-03-15T16:17:36.727 に答える