2014-01-30 40 views
0

考虑数据库表的架构可能会发生变化的情况,即字段,字段数和字段类型可能因客户端ID而异。创建非NoSQL关系多模式数据库的好方法是什么?

取,例如Users表。通常,我们会在一个水平表具有以下字段来表示:

  • 名字
  • 年龄

然而,正如我所说,每个客户可以有不同的要求。

我的想法是,以表示SQL Server等关系数据库中的多模式方法Users,这将是两个表进行:

  1. UsersFieldNames - {FieldNameId,客户端Id,字段名,的FieldType}
  2. UsersValues - {UserValueId,FieldNameId,fieldValue方法}

检索数据(使用的EntityFramework DB前),我想数据透视表,像LINQ Extentions - Pivot Extensions使用的东西可能是有用的。

我想知道任何其他方法可以满足这个要求。

我提出这个问题是为了我自己的好奇心,我回想起过去类似的对话,以及关于this提出的问题。

谢谢。

回答

1

虽然我认为NoSQL数据库最适合这种工作,但我曾尝试过这样的事情。

有一个名为像元表的表,这样

元表= {table_name的,字段名}

和另一个

ACTUAL_DATA = {table_name的,FIELD_NAME,actual_data_id,float_value,STRING_VALUE, double_value,varchar_value}

在actual_data中,字段table_name和field_name是外键,指向METATABLES。在METATABLES中,您可以定义每个客户需要的特定字段。 ACTUAL_DATA表根据数据类型(如果字段值是字符串,它将存储在string_Value字段中)保存这些字段的实际值,存储在相应的值字段中。

虽然这种方法可能不是最高效的。希望能帮助到你。

0

我认为如果架构不同,将会是一个错误。这通常是你想成为标准的东西。

在这种情况下,您可能拥有具有不同属性的用户。在user表中你存储在所有用户共同的属性:

用户{ID(主键),用户名,第一,最后,出生日期,等...}

注:年龄是应该没有被存储,它应该被计算。

然后你可以有一个USER_ATTRIBUTE表:

{用户id,键,值}

所以用户可以有不相关彼此没有模式变更多个属性。

更改模式通常会中断应用程序。

相关问题