Database 哪一种是具有大数据列的单表更有效,还是多表更有效?(hibernate-数据库)

Database 哪一种是具有大数据列的单表更有效,还是多表更有效?(hibernate-数据库),database,hibernate,database-design,relational-database,database-optimization,Database,Hibernate,Database Design,Relational Database,Database Optimization,我的web应用程序是用Grails实现的 我的情况是,我有一个包含更多列的域类(hibernate类),其中一些是大字符串,最多4000个字符 例如: String description // max 4000 // column2, column3, etc 现在我必须为这些元素实现一个多语言数据库,我的策略是为每种语言创建一个字段 String description_en_US String description_de_DE 我的问题是,如果每种语言都有一个单独的表,或者将它保存在

我的web应用程序是用Grails实现的

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

例如:

String description // max 4000
// column2, column3, etc
现在我必须为这些元素实现一个多语言数据库,我的策略是为每种语言创建一个字段

String description_en_US
String description_de_DE
我的问题是,如果每种语言都有一个单独的表,或者将它保存在一个大表中,效率是否会更高。 问题分为两部分。首先,如果hibernate在加载数据时使用大内存,那么哪个对hibernate更有效?其次,哪个对数据库更有效


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

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

Table1: MainTable 

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


Tables2: MainTransTable

     id, MainTable_id (FK), Language, description_trans
所以它将是MainTable实体&它将有maintaranstable实体的集合(一对多关系)。每个MainTransTable将根据语言列以给定语言表示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中我阅读了相应的翻译。我还不知道,但是我同意你的观点,当我需要一种新的语言时,最好不要总是改变数据库的结构。我总是需要翻译的数据,这总是取决于语言环境。然后我有了一个想法,在grails中有一个选项来创建瞬态对象,这些对象没有保存在数据库中,但是它们有自己的“getter”,在这个getter中我阅读了相应的翻译。