2012-02-26 15 views
1

私は設計上の問題を抱えて頭を抱えています。コミュニティが私を助けてくれることを本当に望んでいます。私の現在のデザインは:データベースデザインの欠陥

SUBMISSIONS table 

submission_ID (pk, int) 
company_id (fk, int) 
product_id (fk, int) 
vendor_id (fk, int) 
category (VARCHAR) 
price (INT) 
approval_status (TINYINT) 
notes (MEDIUMTEXT) 

VENDOR table 

vendor_ID (pk, int) 
vendor_name (VARCHAR)  

COMPANY table 

company_id (pk, int) 
company_name (VARCHAR) 

PRODUCTS table 

product_id (pk, int) 
product_name(VARCHAR) 

私のプロジェクトは、レビューのために企業に製品を提出するベンダーです。企業には、ベンダーから提出されたすべての製品をプルアップし、レビューし、使用することを承認または拒否するグリッドを含むダッシュボードがあります。

私の問題はこれです...保留中の製品グリッドをプルアップするとき、私はそれらのカテゴリで提出物をグループ化しています。このようにして、あるカテゴリ(一般的なもの)に100の製品がある場合、個々の製品ではなくそのカテゴリを見るだけで済みます。グリッドからポップアップするモーダルウィンドウで、送信グループにメモを入力できます。ウィンドウのIDはグループ内の最初のサブミットであり、サブミッションはノートが格納される場所です。私の主な関心事は、グループからの提出を個別に承認または却下することができるということです。そのグループの最初の提出物に添付されたグループのメモを入力すると、最初に提出を拒否されます。今再びログインすると、グループのすべてのメモが消えたように見えます。メモは、拒否された製品フォルダにある最初の投稿に添付されているためです。最初にグループにメモを追いかけるより良い方法があり、その後、それらのメモを後で個々の投稿に利用できるようにする必要がありますが、私の限られたデータベース設計スキルでは表示されません。この時点でアドバイスが役に立ちます。

+0

提出物に複数の商品がありますか? – TheGeekYouNeed

+0

また、モーダルにメモを入力した場合、表示されているすべての行が拒否されたことを示しますか? – TheGeekYouNeed

+0

各投稿は、独自の価格を持つ単なる製品です。注記は、会社が製品を承認したいかどうかを追跡するためにモーダルに入力されます。大部分の場合、グループ内のすべての提出物は一緒に承認または拒否されます。そのカテゴリは本質的にすべてを一緒に承認または拒否しました。しかし、時には1件の提出が拒否され、99件が承認されることもあります。私の現在のデザインでは、1つの提出物/製品が拒否された場合、最初に提出されたものですが、提出グループが評価されている間にそれらのメモが失われるため、後で参考になります。 –

答えて

1

私の提案は、TABLEカテゴリCREATE(ID int型AUTO_INCREMENT PRIMARY KEY、名前VARCHAR(250)ないNULL、UNIQUE INDEX(名)、MEDIUMEXTノート)

  • ある
  • SUBMISSIONS
  • category (fk, int)category (VARCHAR)を置き換えます SUBMISSIONS
  • 低下notes (MEDIUMTEXT)は今カテゴリテーブルにメモを添付し
+0

フィードバックに感謝します。私はそれが私が必要とするものに近づいていると思う。私はどのように提出表にそれを結びつけるのかちょっと混乱しています。だから、ベンダーが製品を提出し、サブミッションテーブルに行を作成するときに提案します。また、カテゴリテーブルに行を作成します。その後、すべての後続の提出がカテゴリテーブルのチェックを行い、エントリが存在する場合、そのカテゴリの提出物にFKエントリを作成しますか?私は心を通っていくつかのシナリオを実行していますので、もしあなたがこのデザインで行っていた場所が分かっていれば役に立ちます。もう一度ありがとう... –

+0

投稿はカテゴリのためだけではないので、うまくいきません。 – TheGeekYouNeed

+0

@TheGeekYou明らかに、単一送信のカテゴリを作成する必要があります。 –

1

既に説明したように、カテゴリのテーブルを作成して、提出物にカテゴリIDを格納する必要があります。

あなたのモーダルに表示されているすべてのアイテムを取得するためにクエリを実行しています。グループ内のサブミットを更新するときは、すべてのレコードも更新する必要があります。

だから、基本的に、あなたの更新ステートメントは次のようになります。

UPDATE Submissions 
SET notes = @notes, approval_status = @approval_status 
WHERE (same criteria from your select statement) 

あなたはすでにあなたがモーダルで表示するものを絞り込んされているので、私は、SQLステートメントにパラメーターに値を送信する方法を知っていると仮定します。

+0

あなたのモーダルは使いやすさを追加しますが、カテゴリには多くの製品が含まれることを忘れないでください。したがって、入力されたノートは、カテゴリではなく、カテゴリ/製品の組み合わせの提出に添付されます。 たとえば、食品カテゴリがあります。したがって、あなたはそのカテゴリで既に承認された多くのアイテムを持っています。ユーザーがアプリケーションを使用して、承認されていない食品を承認または拒否します。何らかの理由で、彼らは拒否されています。拒否はカテゴリ全体には付いていません。既にあなたはすでに食品を承認しています。この拒否は、食品カテゴリの製品の各サブミッションに属します。 – TheGeekYouNeed

+0

すべての洞察と助けに+1。再度、感謝します。だから私はあなたが言っていることは、この新しいスキーマをすべての提出は製品/カテゴリの組み合わせに結びつくだろうと思うので、その組み合わせの製品が拒否されても、それは正しいと認められている製品と同じメモを共有しますか?それがあなたが言っていることなら、私はそれで大丈夫です。会社が承認された製品を見て、なぜその製品を承認したのかについての注釈を見ることができれば、それは機能します。拒否された製品に特定のメモを付けることができないという懸念はありますか? –

+0

あなたのコメントをもう一度読んで、私はあなたが言っていることを見ていると思う。私は実際に4000の製品カテゴリを持つ別のテーブルを実際に持っているので、ここで提案された新しいスキーマでは、カテゴリテーブルへの外部キーを持つsubmission/notesテーブルを用意します。あなたの懸念のように聞こえますが、音符はカテゴリ全体に添付されますが、私はそのように設定しません。メモは提出物/カテゴリのコンボに添付されます。 –

関連する問題