【问题标题】:Storing changes on MySQL Database properly在 MySQL 数据库上正确存储更改
【发布时间】:2020-03-31 23:53:24
【问题描述】:

我目前有三个表来跟踪特定条目的更改,但似乎我最终得到了大量条目,我不确定这是否是最好的方法。

我的第一个表格包含基本信息,第二个和第三个表格包含我每 8 小时抓取的额外条目。

ID | creation_date | removal_date | article_url | status 这基本上是最稳定的条目。在我们禁用/删除条目时,只有 Status 和 removal_date 会发生变化。

例子:

ID |  creation_date   |   removal_date   | article_url | status
---|------------------|------------------|-------------|-------
 1 | 10/01/2020 20:00 |       NULL       | http://xxx  |   1
 2 | 23/01/2020 10:00 | 27/01/2020 13:00 | http://xxx2 |   2
 3 | 10/02/2020 15:00 |       NULL       | http://xxx3 |   1

Status 1 = Active
Status 2 = Inactive

第二个表包含其他所有内容: ID | main_id | last_update | title | description | views | rating | comments

只要有变化,第二个表就会每 8 小时创建一个新条目。然后根据此处添加的条目,我显示每天/每周/每月的平均观看次数/评分/cmets 变化。

例子:

ID | main_id |    last_update   |      title     |    description     | views | rating | comments
---|---------|------------------|----------------|--------------------|-------|--------|---------
 1 |    1    | 10/01/2020 20:00 | First Article  | Description..      |   1   | 1 | 0
 2 |    2    | 23/01/2020 10:00 | Second Article | Desc..             |   1   | 1 | 0
 3 |    1    | 11/01/2020 20:00 | First Article  | Description update |   15  | 3 | 2
 4 |    1    | 12/01/2020 20:00 | 1st Article    | Description update |   30  | 5 | 4
 5 |    3    | 10/02/2020 15:00 | 3rd Article    | Descript!          |   3   | 1 | 1

第三个表包含标签: ID | main_id | tag_id | date_added | date_removed

我想而不是有一个状态来添加一个空的 date_removed 以便以防标签被更新/删除/等更新该部分。标签保存在单独的表中,只需获取 id 并将两者之间的连接存储在这里。

例子:

ID | main_id | tag_id |    date_added    |   date_removed
---|---------|--------|------------------|------------------
 1 |    1    |    2   | 10/01/2020 20:00 |      NULL
 2 |    1    |    3   | 15/01/2020 16:30 | 17/01/2020 13:00
 3 |    2    |    3   | 23/01/2020 10:00 |      NULL
 4 |    3    |    5   | 10/02/2020 15:00 |      NULL
 5 |    1    |    5   | 11/02/2020 17:00 |      NULL

我只是想知道是否有更好/更合适的方式来存储上述数据。

【问题讨论】:

  • 请简洁明了,很难理解你在处理什么样的数据,因此很难评估如何建模数据。
  • @digitai 现在我添加了示例表是否更好?
  • date_addedcreation_date 的值是否相同? removal_datedate_removed 呢?换句话说,每篇文章有多少个不同日期,包括NULL
  • 我在描述中迷路了。这些表中的任何一篇文章都可以有多行吗?

标签: mysql database database-design


【解决方案1】:

是的,@Maria,更清楚了。 假设您正在处理博客条目,您可能有这样的数据模型。

Table 1.  articles. // where every article is created.

article_id | article_creation_date | article_title | article_url | article_creator_id | article_description          |
-----------|-----------------------|---------------|-------------|--------------------|------------------------------|
1          | 2020/03-31 10:36:05   | "The Dilemma" | /articles/1 | 23                 | Explains the relations....|

表 2.article_status // 存储每篇文章的状态变化。

article_status | article_id | status | date_of_change     |
---------------|------------|--------|--------------------|
1              |  1         | 7      | 15/04/2020 09:30:00|

表 3.article_tags。 // 每篇文章及其标签

article_tag | article_id | tag_id | date_added         |
------------|------------|--------|--------------------|
1           |  1         | 24     | 15/04/2020 09:30:00|

表 4. 文章浏览量 // 存储每篇文章的总浏览量,一段时间内,比如一天、一周、8 小时……

article_v_id | article_id | views_summarized | time_lapse     | time_lapse_value | date_summarization |
-------------|------------|------------------|----------------|-------------------|-------------------|
1           |  1          | 1578             |  Day           | 10/04/2020        | 12/04/2020 13:27:04  |

表 5.article_updates // 存储对每篇文章所做的更改/更新。

article_update_id | article_id | type_of_update | update_detail | update_author | date_of_update         |
------------------|------------|--------------------------------|---------------|------------------------| 
1                 |  1         | Title          |               |    John Doe   | 19/04/2020 15:27:24    |

并且更新的内容直接存储在文章表中,例如标题更改。无需存储所有修改的标题、内容。只是事件和谁做出了改变。

【讨论】:

  • 您如何跟踪上述场景中标题和/或描述的变化?我的意思是你怎么能看到以前的条目等?谢谢!
  • @Maria 我相信您和任何阅读此答案的人都会发现它非常准确和有用。所以,为了激励结对程序员来帮助你,善待并奖励答案,这样可以激励社区慷慨合作。
猜你喜欢
  • 2011-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
相关资源
最近更新 更多