2011-08-05 88 views
0

我想创建一个参考表。随着时间的推移,行数和列数可能会增长(并变得多余)。列名也可能随时间而改变。假设列'Position'中的值是'IT Engineer',在行(n)中。对于列结构中进一步向下的特定行(n),让我们在'Behind Sheds'列中说,是我需要检索的值。如果列数是固定的,那么这是没有问题的,但现在使用T-SQL动态添加列,这很容易实现,甚至可以重命名这些列。我的问题是,为上述示例添加动态列是否是一种好的做法,还是有更好的选择,以及如何?SQl参考表 - 动态列

谢谢。

回答

1

可能会更好地使用类似字段的附加表格:person_id(主键的外键),person_param(例如“位置”),person_value(例如“IT工程师”)?

+0

+1我同意。一般来说,如果您即时修改模式,那么您就错了。 –

+0

我认为Subdigger有正确的想法;而是有多行,其中列[Position]和[Where]是唯一的,而[value]列是具有所需值的列。使它更容易。谢谢 –

0

我相信你的问题是实施EAV模型的权利。的

基本上代替具有20个列,则有3:

  • 实体
  • 属性(也称为列名)
  • 值(实际上可能是多个值不同的类型,以及你只是填充正确的一个)

这样,对于数据库中的10个实体,每个实体有20列,可以在EAV表中填充200行数据。它具有较少的性能,查询比较困难,但它确实提供了灵活性,因此您甚至可以让每个实体具有不同的属性集。