如何保持多语言数据以及版本化的树结构?

时间:2017-10-01 13:37:56

标签: mysql version-control query-performance

我目前正致力于构建和更改书籍和文章的工具。

  • 一本书包含文章并具有特定结构
  • 一篇文章可以在同一本书中多次出现
  • 它是多语言的,所以每篇文章都可以(但不是必须)有不同的语言。 (如果所选语言没有任何数据,只需显示通知或类似信息即可)
  • 稍后,可能会添加新语言
  • 深度/嵌套是动态的(文章可以包含子文章)
  • 文章和结构都必须进行版本控制(我以后必须能够恢复特定状态)

这是我目前的数据库方法: current database structure

有了这个,我可以抓住这样一本书的最新版本:

Regex regex = new Regex(".*?\\(.*?, \"(?<Group>.*?)\",.*?, \"(?<WhatEverPP01Is>.*?)\",.*");

var match = regex.Match("YourStringToMatch");

if (match.Success)
{
    // Here you can access the group values:
    var groupValue = match.Groups["Group"].Value;
    var whateverPP01Is = match.Groups["WhatEverPP01Is"].Value;
}

然而,这意味着:

  • 如果我创建一个新版本的文章,我必须更新最新的结构以反映这一点(但这也意味着我&#34;丢失&#34;版本,因为内容现在已更改)
  • 如果我添加,删除或移动文章,我必须创建一个全新的结构版本以进行最轻微的更改(这会导致数据库中的大量数据非常快并可能影响查询时间)

这种方法似乎并不是我真正想要的,因为不可能在单一书籍结构中引用相同文章的不同语言的不同版本。此外,子选择似乎大大减慢了整个过程。

有没有办法表示这种联系,以及防止任何下行性能?

1 个答案:

答案 0 :(得分:0)

请考虑以下事项:有两个表结构:一个用于Current结构;只要发生更改,就会更新。另一个是结构的History

进行更改时,请将当前结构从Current复制到History,然后修改Current

这会降低插入和更新的速度,但会简化选择。

History中的多行将指向相同的ArticlesUsers等。但这没关系。