Sql server 创建非NoSQL关系型多模式数据库的好方法是什么?

Sql server 创建非NoSQL关系型多模式数据库的好方法是什么?,sql-server,relational-database,database-schema,Sql Server,Relational Database,Database Schema,考虑这样一种情况,即数据库表的模式可能会发生更改,即字段、字段数量以及这些字段的类型可能会根据客户机ID而有所不同 以Users表为例。通常,我们会在一个水平表中用以下字段表示: 名字 姓氏 年龄 然而,正如我提到的,每个客户可能有不同的要求 我在想,要在关系数据库(如SQL Server)中表示对用户的多模式方法,可以使用两个表: UsersFieldName-{FieldNameId,ClientId,FieldName,FieldType} UsersValue-{UserValueI

考虑这样一种情况,即数据库表的模式可能会发生更改,即字段、字段数量以及这些字段的类型可能会根据客户机ID而有所不同

Users
表为例。通常,我们会在一个水平表中用以下字段表示:

  • 名字
  • 姓氏
  • 年龄
然而,正如我提到的,每个客户可能有不同的要求

我在想,要在关系数据库(如SQL Server)中表示对
用户的多模式方法,可以使用两个表:

  • UsersFieldName-{FieldNameId,ClientId,FieldName,FieldType}
  • UsersValue-{UserValueId,FieldNameId,FieldValue}
  • 为了检索数据(首先使用EntityFrameworkDB),我考虑使用pivot表,使用类似的工具可能会很有用

    我想知道有没有其他方法可以满足这一要求

    我问这个问题是出于我自己的好奇心,因为我回忆起过去发生的类似对话,以及与提出的问题有关的对话


    谢谢。

    我认为改变模式是错误的。它通常是你想要成为标准的东西

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

    用户{id(主键)、用户名、第一个、最后一个、DOB等

    注意:年龄是不应该存储的东西,应该进行计算

    然后可以有一个用户属性表:

    {userId,key,value}

    因此,用户可以拥有多个彼此无关的属性,而无需更改模式


    更改模式通常会破坏应用程序。

    虽然我认为NoSQL数据库最适合这样做,但我曾经尝试过类似的方法

    有一个名为METATABLES的表,如下所示

    METATABLE={table_name,field name}

    还有一个,

    实际数据={table_name,field_name,实际数据_id,float_value,string_value,double_value,varchar_value}

    在实际的_数据中,字段table_name和field_name将是外键,指向元表。在元表中,定义每个客户机需要的特定字段。“实际值”数据表保存这些字段的实际值,存储在“适当值”字段中,具体取决于数据类型(如果字段值是字符串,则存储在“字符串值”字段中)

    不过,这种方法可能不是最有效的。希望能有帮助