2011-09-17 4 views
1

私は、ユーザーがアイテムに入札できるオークションスタイルのウェブサイトを作成しています。プロジェクトや入札機能には、データベース設計に関する混乱があります。当初は、 'project'というテーブルにbid_idを含む 'bids'という複数の値を持つ列が含まれている可能性があると考えました。しかし、少しの研究の後では、このメソッドはno-noです。データベースデザインで多値の列を述べた大学の講義を2回受講してください。問題の最良のアプローチは何でしょうか?オークションスタイルのウェブサイトのデータベースデザイン

私の意見では感謝

ダン

+2

最初にテーブルを考えるべきではありません。それはプログラミングが1980年代にどのように行われたかです。 :) [あなたは最初にあなたのユーザーの価値を考えなければなりません。](http://agilemanifesto.org/principles.html) – bzlm

+0

大学はこの時代遅れの方法を教えているのは残念です。しかし、私はあなたのリンクが好きでした!質問に答えても大丈夫ありがとうございます:) –

答えて

1

データベースの設計方法によって異なります。商品IDごとにオークションが1つだけある場合は、BIDテーブルで十分です。

製品テーブル

PRODUCT 
PRODUCT_ID -- primary key 
.... 

オークション表

AUCTION 
AUCTION_ID -- PK 
PRODUCT_ID -- foreign key to PRODUCT 
START_TIME 
END_TIME 
MODE   -- e.g. dutch, english... 
... 

入札テーブル

:各オークションはあなたにも AUCTIONテーブルで終わる可能性があり、個々の構成を必要とする場合
BID 
BID_ID  -- PK 
AUCTION_ID -- foreign key to AUCTION 
AMOUNT 
TIME 
... 

一般に、リレーショナルデータベースモデルでは、複数の値を持つ列は使用しないでください。 normalizationを目指すべきです。後でクエリの最適化が行われる場合は、さらにインデックス、ビューおよび/またはプロシージャを導入する必要があります。

0

、最善の解決策は、例えば、列のすべての必要な情報を含むテーブルbidsを持っているだろう:などbid_idproduct_idbid_amountbid_time

+0

bid_id、product_id、bidder_idなどを含む入札と呼ばれる既存のテーブルがあります。これは別の開発者が作成したものですが、これが彼の他の「コード」の一部としてそれを行う最善の方法は非常に疑わしいです。このようにすると、指定した 'product_id'に一致するエントリの '入札'のすべてのエントリを検索する必要がありますか? –

+0

@ダン、リレーショナルデータベースで検索する必要はありません。商品と入札単価の間には真の関係があります。 – bzlm

0

これはメタSQLのみです。

ユーザー:ID、... 入札:ID、auction_id、user_idは、量、 オークション:入札のID、オブジェクト、...終了日、...

インデックス:auction_id、量desc (idのようなものもあります)...

関連する問題