-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 的表,它将包含所有像这样的字段状态信息。

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            | 
+------+--------+-------------+------------- +

在对数据库进行大量调用时,对于设计目的和效率来说,什么会更容易?

我已经开始使用第一种方法,但它让我很头疼,但如果另一种方法是相同的,我不想改变..

有人有意见(我相信你有)或替代方法吗?

谢谢

4

2 回答 2

2

所以,总结一下:

  • deals是两个客户之间的一次性
  • clients是人吗
  • proposals形成的胆量deals,并且每个人只能有一个活跃的deal
  • proposals有一个状态:approved, declined, pending. Aclient需要批准他们
  • 所有历史都需要保存在以下内容上:proposals,deals

按照这些指导方针,我将其设置如下:

交易

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 回答
0

我认为第一种方法的很多读/写会更好,同时更难维护,而第二种方法更容易维护,并且可能在以后证明自己更有用(如果你需要表中的一些统计数据)\

如果您更喜欢第一种方法,我个人会选择第二种或选择 mongodb 或类似方法。

于 2013-05-17T18:52:23.820 回答