用户需要能够将特定类型的列添加到我的网页上的静态表中,然后将他们输入的信息保存到数据库中。
我被告知实际上它们几乎不会超过5列,但我宁愿支持N.列都将具有相同的数据类型。
我的第一个想法是拥有一个XML列,其中包含所有添加列中的值,但我很好奇是否有其他人提出了更好的解决方案。建议?
答案 0 :(得分:0)
如果将这些数据序列化为一列(如使用xml),如果需要搜索,则会出现问题。
如果你不需要搜索它,那么xml就可以了。
您可以使用父子模型:
FixedTable
PK
data1
data2
...
VariableTable
PK - auto generate/identity
fk - points to FixedTable.PK
data1
仍然可以添加索引和搜索。您的regualr数据位于FixedTable中,用户添加的任何extra columns
都会进入VariableTable。
答案 1 :(得分:0)
您可以使用vertical table。你必须跳过一些箍,并且你会有一些性能命中,但是在这方面他们非常灵活。此外,如果您使用的是SQL Server,请查看PIVOT command。
答案 2 :(得分:0)
如果必须这样做,请在可以稍后加入原始表的单独表中执行此操作。如果必须,您可以使用EAV结构,但要注意添加n列的灵活性会产生非常大的性能影响。在很多情况下,我说的是非常不可接受的表现,记录越多,表现越差。除非你确定别无选择,否则不要走这条路。
另一种方法是接受他们的话,并添加一个表格,其中有五列标记为col1,col2,col3(以及您需要链接到用户和/或其他数据表的其他任何列)并让他们添加数据那些专栏。如果每个用户都要为它们命名不同的东西,则可能需要使用交叉引用表来确定列名称。
您可以将数据放入xml字段,但是稍后如何查询?在决定处理方法之前,你真的需要弄明白。
总的来说,这种灵活性是一个糟糕的想法。五个不同的用户将分别添加五个不同的列,这些列包含您想要一起查询的simliar数据,但是因为它们每个都使用不同的名称,所以您有一个混乱而不是数据库。如果您必须拥有客户设计的列,请至少尝试让每个客户的一个管理员添加列,而不是动态用户,因为他们会想到一些好的东西。