-1

クライアントが変更を送信できるプロジェクトがあり、管理者は提案を見て、承認、編集して承認、編集して承認のためにクライアントに送り返す、または拒否することができます。

誰かが編集を気に入らず、元に戻したい場合に備えて、編集が行われたときに元の提案を保持したいので、悪夢になる2セットのデータが必要になります。

これが私の現在のシステムで、より効率的である必要があると思います。より良いアイデアが必要です。

どのフィールドが編集されたかを正確に確認したいので、すべてのフィールドのステータスが必要です。

mySQL

Table  proposal_deal 

+----------+------------+--------------+--------------+--------------+
|  deal_id | name       |name_status   | price        | price_status |
+----------+------------+--------------+--------------+--------------+
|  1       | deal 1     | 1            |12.00         | 1            |    
+----------+------------+------------- +--------------+--------------+

Table  deal 

+------+---------+-----------+--------------+
| id   |deal_id | name       |price         | 
+------+--------+------------+--------------+
|  1   | 1      | deal 1     |12.00         | 
+------+--------+------------+------------- +

これらのテーブルには多くのフィールドがあるため、ステータス列も多くあります。このようなすべてのフィールド ステータス情報を格納する status という 3 番目のテーブルを追加する方がよいのではないかと考えています。

mySQL 

Table  proposal_deal

+----------+------------+-------------+
|  deal_id | name       |price        |
+----------+------------+-------------+
|  1       | deal 1     |12.00        |   
+----------+------------+-------------+

Table  deal 

+------+---------+-----------+--------------+
| id   |deal_id | name       |price         | 
+------+--------+------------+--------------+
|  1   | 1      | deal 1     |12.00         | 
+------+--------+------------+------------- +

Table status 

+------+--------+-------------+--------------+
| id   |deal_id | column_name |status        | 
+------+--------+-------------+--------------+
|  1   | 1      | name        | 1            | 
+------+--------+-------------+------------- +

DB に多くの呼び出しを行うときの効率だけでなく、設計目的のために何が簡単になるでしょうか?

私はすでに最初のアプローチから始めていますが、頭痛の種ですが、他のアプローチが同じになる場合は変更したくありません..

誰にも意見がありますか(きっとそう思います)、または別のアプローチがありますか?

ありがとう

4

2 に答える 2

2

だから、要約:

  • deals2 つのクライアント間の 1 回限りの
  • clients人です
  • proposalsの内臓を形成し、deals1 つにつき 1 つのアクティブしか存在できません。deal
  • proposalsステータスがあります: approveddeclinedpending。Aclientはそれらを承認する必要があります
  • すべての履歴は次のものに保存する必要があります: proposalsdeals

これらのガイドラインに従って、次のように設定します。

お得な情報

id
name
proposal_id (FK proposals.id, UPDATE:CASCADE, DELETE:SETNULL)
client_id (FK clients.id, UPDATE:CASCADE, DELETE:SETNULL)
company_id (FK clients.id UPDATE:CASCADE, DELETE:SETNULL)

提案

id
name
price
(more data fields)
modified_by (FK clients.id UPDATE:CASCADE, DELETE:SETNULL)

状態

id
proposal_id (FK proposals.id UPDATE:CASCADE, DELETE:RESTRICT)
status
modified_by (FK clients.id UPDATE:CASCADE, DELETE:RESTRICT)

必要に応じてタイムスタンプを追加します。UPDATE更新前に行を複製し、それに応じて行を更新するトリガーを使用して、提案の編集を個人的に行います。これにより、すべてのステータス変更を追跡するために必要な一連の外部キーを確実に取得できます。

ああ、取引の最新の提案もdealsテーブルで変更する必要があります。また、トリガーを使用してこれを行うと、生活が楽になります。

于 2013-05-17T19:01:56.150 に答える