是否可以使用XML列存储额外数据?

Pie*_*ant 2 c# xml sql-server

如果没问题,建议使用xml列存储用户界面可能提供的任何额外数据?

例如,假设一个Employee表

CREATE TABLE Employee
(
    EmployeeId int not null,
    Name nvarchar(300) not null,
    Phone varchar(30) null,
    Email varchar(320) null,
    Address nvarchar(max) null,
    Data xml null
)
Run Code Online (Sandbox Code Playgroud)

Data 可以包含许多值,如额外的电话号码,评论......

我们希望我们所有的客户都会询问不同的领域Employee,并且我们不想在每次想到要添加的新字段时都弄乱数据库结构.

我们希望存储在xml列中的数据是不经常访问的数据.除了在浏览员工列表时可以查看,还可能需要打印数据.所以我们确实需要沿着数据存储数据类型(有点像数据集序列化其数据)

这是存储未知额外数据的好方法吗?

编辑 给了一个更好的例子

更新 我还没有选择答案,因为我正在与我的团队讨论你们建议的不同方法.

小智 5

你可以这样做:

[EmployeeField]
-----------------------------------------------------
EmployeeID    EmployeeFieldName    EmployeeFieldValue
Run Code Online (Sandbox Code Playgroud)

事实上,.NET Membership用于具有动态字段的用户配置文件的方法相同.许多业务应用程序使用相同的方法来存储动态的客户特定输入.

记入Spencer Ruport的评论,这种方法被称为实体 - 属性 - 价值模型(EAV).

  • 这通常称为实体属性值(EAV)模型.要非常小心,因为如果用于存储错误类型的信息,性能会有一些相当大的缺点. (3认同)