可以有一个包含可变列的表吗?

时间:2011-09-05 08:23:47

标签: sql sql-server

这可能是一个愚蠢的问题,但这里有:

是否可以制作一个能够包含具有可变列数和自定义列名的行的动态表?

我已经浏览过EAV建模,但看起来很重。一个真实的例子可能是这样的:

假设我有一个客户注册。但每个客户可能会输入不同的信息。根据您想要输入的内容,它应该反映在数据库中。 (I.E.每个客户都有不同的栏目)

这是不可能的/可能的吗?

更新

标准方法(即具有包含所有所需列的表并仅将信息保存到对特定客户有意义的列中,同时将其余列设置为NULL )对我不起作用,因为我想要的不能使用'固定'列名。示例一客户可能需要CVR编号,而另一个客户可能希望他们的电话号码作为参考编号。第三个人可能想要一些完全不同的信息。因此,为了避免使用包含500列的表,我现在想要创建一个包含列数据行的额外表。像这样:Id,Name,Value,CustomerId。因此,当我需要客户的信息时,我所要做的就是使用特定的客户ID迭代此表。

我自己编辑!:

很抱歉这个简单的SQL问题困扰着你! :-)祝你有愉快的一天......

3 个答案:

答案 0 :(得分:6)

您可以将其建模为Customer和CustomerAttributes表之间的一对多关系。类似的东西:

**Customer table**
CustomerId
LastName
FirstName
...

**CustomerAttributes table**
CustomerId
AttributeName
AttributeValue

答案 1 :(得分:1)

这在Sql-Server中是不可能的。正如Marco所说,您可以将每个客户的数据存储在xml中。

如果提前知道所有列,并且一些客户使用一个集合而其他客户使用不同的集合,那么每组列的子表是正常的方法。

如果提前知道列,那么数据如何使用?没有代码或报告可以引用它。也许它应该存储在通用的“Notes”字段中的非结构化。

答案 2 :(得分:0)

据我所知,在标准关系数据库中不可能,但您可以查看名为“No-SQL”的无架构数据库,如MongoDB