Php 需要高效的数据库模型
我有一个项目,客户可以提交更改,管理员可以查看建议,或者接受、编辑并批准、编辑并发送回客户以供批准,或者拒绝它们 我将需要2组数据,这将是一个噩梦,因为我想保留原来的建议时,编辑已作出,以防有人不喜欢的编辑,并希望恢复到原来的 这是我目前的系统,我认为需要更有效,我需要一个更好的想法 我需要每个字段的状态,因为我想确切地看到哪个字段被编辑过Php 需要高效的数据库模型,php,mysql,Php,Mysql,我有一个项目,客户可以提交更改,管理员可以查看建议,或者接受、编辑并批准、编辑并发送回客户以供批准,或者拒绝它们 我将需要2组数据,这将是一个噩梦,因为我想保留原来的建议时,编辑已作出,以防有人不喜欢的编辑,并希望恢复到原来的 这是我目前的系统,我认为需要更有效,我需要一个更好的想法 我需要每个字段的状态,因为我想确切地看到哪个字段被编辑过 mySQL Table proposal_deal +----------+------------+--------------+--------
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 |
+------+--------+-------------+------------- +
在对数据库进行大量调用时,对于设计目的和效率来说,什么更容易
我已经从第一种方法开始了,但是它让我头疼,但是如果另一种方法是一样的,我不想改变
有人有意见吗?我肯定你有,还是有其他方法
谢谢我认为第一种方法会使很多读/写操作变得更好,同时也更难维护,而第二种方法更容易维护,如果您以后需要表中的一些统计数据,它可能会证明自己更有用\ 如果您更喜欢第一种方法,我个人会选择第二种或mongodb或类似方法。因此,总结: 交易是两个客户之间的一次性交易 客户是人 提案构成了交易的核心,每笔交易只能有一个活跃的提案 提案的状态为:已批准、已拒绝、待定。客户需要批准它们 所有历史都需要保存在以下方面:提案、交易 根据这些指导原则,我将按如下方式设置: 交易 提议 地位 添加您认为合适的时间戳。我个人会使用一个更新触发器来执行建议版本,该触发器会在更新之前复制行,然后相应地更新行。这保证您拥有跟踪所有状态更改所需的外键集
哦,交易中的最新提议也应该在交易表中更改。您也可以使用触发器来实现这一点,以使您的生活更轻松。目前来看,这个问题不适合我们的问答形式。我们希望答案能得到事实、参考资料或特定专业知识的支持,但这个问题可能会引发辩论、争论、投票,如果您正在使用某种ORM库,那么在更新之前将时间戳/负责人副本保存到另一个表中可能会更容易。我们都需要一个高效的数据库模型!从第三范式开始。然后使用EXPLAIN找出查询需要哪些索引。Thans man,我喜欢这种方法,我没有触发器方面的经验,所以我想我必须对此做更多的阅读。为什么我还想在哪里使用时间戳?@vinylDeveloper:我个人会将created_at和modified_at时间戳添加到status、proposal和deal中。这是为了告诉您什么时候添加和修改了内容。触发器:。它们实际上是基于另一个动作发生的自动动作。在本例中,更新如果我想要提案表中每个字段的状态,您将如何设置?这样我就可以准确地跟踪编辑的字段。不仅仅是整个交易?@vinylDeveloper:创建一个历史记录表,在更新提案时触发。每当更新完成时,在历史记录中插入一行。
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)