我害怕,我不知道我在做什么。

1

我有一个表称为ticket具有称为total柱。当总被更新我想保持它的记录(老总等),所以我决定撤销total列,创建一个名为ticket_total与列ticket_idtotaldatetime(最近的课程表是“当前” 总计)。

2:

然后我意识到,我稍后会想给我的客户进行排序total门票,或聚集总数等,所以拉报表的能力,我决定,而不是放回total列上ticket,并改变所述total柱直接当总被更新,但首先创建一个ticket_total行与前面total的记录。

看来,因为我不会需要查询相关ticket_total表尽可能多的版本2将是高效率的,但我不知道你怎么DB大师在那里想。我刚学数据库的设计和恐惧,我永远不会成为好它。

有帮助吗?

解决方案

我会去与选项2,您所建议的。

只要确保你正在做更新的插件(的票)+(在ticket_total)的交易,以确保完整性。

其他提示

你的第二个选择是快,但如果你想创建总的历史价值报告,你应该应该有您储存你与戳一起替换值一个单独的表。这种类型的表被称为审计表

回复:“效率” - 最好是在项目开始时不要过于担心数据库的效率。过早的优化是一个常见的错误,以避免。

更好的为您的需求而设计专注于他们。后来,你可以测试是否性能瓶颈在哪里,工作解决它们。

对于较小的数据库(几万行的),甚至“低效率”的查询经常去非常快给定今天的服务器和软件。

保持简单我建议你避免组合键和重载表语义,除非你真的有需要。

建议您有两种类型的数据:目前的票务信息,并为老“总”值的历史表格

所以,你的版本2将是优选的。

ticket
  id
  field_a
  field_b
  total    # current_total

ticket_total  # history of ticket total field
  id
  ticket_id
  total
  create_time

同时 “总” 的声音等的东西的聚合。我建议你尽量想出这是更具描述性的字段名。 - 什么是该领域的总的? “total_worktime”?

<强>加记住添加索引的表。通过什么,你使用的认定指标。如不售票台有CUSTOMER_ID?可以肯定,它的索引。

我将使ticket_total的视图,而不是一个表。我将创造另一种观点认为ticket_current在那里我会过滤由最近日期的门票,也就是说,如果票表是TICKET_ID和日期时间双重密钥。如果没有,那无视最后一部分。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top