考虑一种情况,数据库表的模式可能会发生变化,即字段,字段数和这些字段的类型可能会因客户ID而异。
以Users
表为例。通常我们会在具有以下字段的水平表中表示:
但是,正如我所提到的,每个客户可能有不同的要求。
我在考虑在SQL Server这样的关系数据库中表示Users
的多模式方法,这可以通过两个表来完成:
要检索数据(首先使用EntityFramework DB),我正在考虑数据透视表,使用像LINQ Extentions - Pivot Extensions这样的东西可能很有用。
我想知道满足这一要求的任何其他方法。
我问这个问题是为了我自己的好奇心,因为我记得过去会出现类似的对话,并提出this提出的问题。
感谢。
答案 0 :(得分:1)
虽然我认为NoSQL数据库最适合这种情况,但我曾经尝试过类似的东西。
有一个名为METATABLES的表,就像这样
METATABLE = {table_name,field 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字段中)。
但这种方法可能不是最有效的方法。希望它有所帮助。
答案 1 :(得分:0)
我认为架构变化是错误的。这通常是您想要成为标准的东西。
在这种情况下,您可能拥有具有不同属性的用户。在用户表中,您可以存储所有用户共有的属性:
USER {id(主键),用户名,first,last,DOB等...}
注意:年龄不应存储,应计算。
然后你可以有一个USER_ATTRIBUTE表:
{用户id,键,值}
因此,如果没有架构更改,用户可以拥有多个彼此无关的属性。
更改架构通常会破坏应用程序。