【问题标题】:which is more efficient single table with large data columns or multiple tables? (hibernate - database)具有大数据列的单表或多表哪个更有效? (休眠 - 数据库)
【发布时间】:2012-10-26 09:15:39
【问题描述】:

我的 Web 应用程序是在 Grails 中实现的。

我的情况是我有一个包含更多列的域类(休眠类),其中一些是大字符串,最多 4000 个字符。

例如:

String description // max 4000
// column2, column3, etc

现在我必须为这些元素实现一个多语言数据库,我的策略是为每种语言设置一个字段。

String description_en_US
String description_de_DE

我的问题是,如果我为每种语言都有一个单独的表,或者将它保存在一个大表中,是否会更有效。 这个问题有两个部分。第一,hibernate在加载数据时使用大内存更高效,第二,数据库更高效?

以后我可能会拥有超过 10 种语言。

【问题讨论】:

  • 我总是需要翻译的数据,这总是取决于语言环境。然后我有了一个想法,在 grails 中有一个选项可以创建临时对象,这些对象没有保存在数据库中,但它们有自己的“getter”,在这个 getter 中我阅读了适当的翻译。

标签: database hibernate database-design relational-database database-optimization


【解决方案1】:

我无法回答这个问题,但我强烈建议不要将字段用于一种语言,而是使用另一个包含语言和对该表的引用的表。这是因为如果您必须添加另一种语言,您不必更改现有表的结构,而只需在语言表中添加另一行,并且可以将键用作描述表中的外键。我认为长字符串不是问题。您希望维护多少描述表条目?

【讨论】:

  • 我还不知道,但我同意你的观点,当我需要一种新语言时,最好不要总是改变数据库的结构。
【解决方案2】:

我之前处理过类似的情况,我们有一张包含一些值的表,并且需要以多种语言存储它们的翻译值。经过多次讨论和头脑风暴,我们最终确定了以下方法。

Table1: MainTable 

     id, Description, Column1, column2 ......


Tables2: MainTransTable

     id, MainTable_id (FK), Language, description_trans

因此它将是 MainTable 实体,并且它将具有 MainTransTable 实体的集合(一对多关系)。每个 MainTransTable 将根据 Language 列以给定语言表示 MainTable 的翻译版本

Advantages:
- In future if you want to add value for another language, then you just need to add another row in MainTransTable
- Currently you are only translating only one column. So in future if you decide to translate any other columns,  you can use same table structure with new trans column added in trans table

【讨论】:

  • 好的,但是你是不是因为它对内存和数据库更有效而产生了这个想法?这实际上是我的问题。
  • 这种方法既有效又设计合理。这样想,如果您将列放在同一个表中,那么即使您不需要,每次都会获取它们。但是当你去一对多的关系时,它就会被延迟加载。所以当你获取 MainTable 时,翻译数据不会每次都来。所以 MainTable 查询会更快。每当您需要翻译后的数据时,您都可以延迟加载。
  • 好的,我同意。我总是需要翻译的数据,这总是取决于语言环境。然后我有了一个想法,在 grails 中有一个选项可以创建临时对象,这些对象没有保存在数据库中,但它们有自己的“getter”,在这个 getter 中我阅读了适当的翻译。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
  • 2020-03-25
  • 2013-06-09
相关资源
最近更新 更多