想象一下,有一位勤杂工,他的服务:
+----+-----------------+--------+
| id | name | amount |
+----+-----------------+--------+
| 1 | hair cut | 40 |
| 2 | shampoo | 10 |
| 3 | french manicure | 90 |
+----+-----------------+--------+设想一张交易表:
+----+------------+------------------+
| id | id_service | date_transaction |
+----+------------+------------------+
| 1 | 1 | 01/01/2015 |
| 2 | 1 | 02/01/2015 |
| 3 | 1 | 02/01/2015 |
| 4 | 2 | 02/01/2015 |
| 5 | 2 | 02/01/2015 |
| 6 | 1 | 06/01/2015 |
| 7 | 1 | 06/01/2015 |
| 8 | 3 | 06/01/2015 |
| 9 | 2 | 06/01/2015 |
| 10 | 2 | 10/01/2015 |
| 11 | 1 | 10/01/2015 |
| 12 | 3 | 10/01/2015 |
| 13 | 1 | 10/01/2015 |
| 14 | 2 | 10/01/2015 |
| 15 | 2 | 11/01/2015 |
| 16 | 1 | 16/01/2015 |
+----+------------+------------------+使用一个简单的INNER JOIN,我们可以读到,例如,特定一天的总和。
但我们的首席执行官并没有对技术上瘾,明天他将改变每一项服务。
因此,为了防止这一幕,我必须如何设置我的网络应用程序?
1)我每次在事务表中重复service.name和amount.name?所以,我不使用内部连接?
1a)我也可能失去分组的可能性,没有数字ID。而且我不能从服务表中使用它们,因为服务更改(或最坏的)被删除了……
2)我需要阻止用户编辑/删除他的服务(S)?
3)你的考虑是什么?
发布于 2015-01-22 23:11:51
如果您想要确保有一个已建立的服务列表(从表到内部连接),那么您需要管理这个表的更改,而不中断历史记录的联接。
所有这些都需要更多的编码来处理什么服务在什么时候可用的逻辑。
发布于 2015-01-23 13:22:50
您的事务表不应该依赖于服务表。这是因为事务一旦完成,与服务表的关系就会丢失。为什么?显然,在“服务”表中,您的服务名称或服务数量可能会更改。在历史事务表中,名称和金额将是您将其输入事务表时的名称和数量,如果服务表中有更改,则不会更改。
这也是为什么“金额”不应该出现在“服务”表中,而应该有它自己的表。这样你就能保持历史上的价格记录。不,您也不会在事务表中引用该数据。因为价格可以是任何东西。(比方说你进来了,但因为你还带着你的孩子,这孩子可以用半价理发。)事务表必须有接收任何自定义金额的自由。)。
当然,您可以保留对服务表的引用,因此,如果您的客户决定将“超级发型”更改为“超棒的发型”,这是另一个名称下的相同服务,那么您仍然可以分组。
https://softwareengineering.stackexchange.com/questions/270850
复制相似问题