我有一个项目,客户可以提交更改,管理员可以查看提案,接受,编辑和批准,编辑并发回给客户进行审批,或拒绝提交。
我将需要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 |
+------+--------+-------------+------------- +
在对数据库进行大量调用时,设计目的和效率会更容易吗?
我已经开始使用第一种方法了,但它让我很头疼,但如果其他方法是相同的话我不想改变..
任何人都有意见(我确定你这样做)或其他方法?
感谢
答案 0 :(得分:2)
所以,摘要:
deals
是两个客户之间的一次性clients
是人proposals
形成deals
的胆量,每deal
proposals
的状态为:approved
,declined
,pending
。 client
需要批准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
表中进行更改。您也可以通过触发器来实现这一目标,让您的生活更轻松。
答案 1 :(得分:0)
我认为第一种方法会有更多的读/写操作,同时更难维护,而第二种方法更容易维护,并且可能在以后更有用(如果你需要一些来自表)\
如果您更喜欢第一种方法,我个人会选择第二种或选择mongodb或类似物。