代码之家  ›  专栏  ›  技术社区  ›  Abe Miessler

需要一种好的方法将数据存储在数据库中,该数据库来自一个可以包含n列的网页上的表。

  •  1
  • Abe Miessler  · 技术社区  · 14 年前

    用户需要能够将特定类型的列添加到我的网页上原本静态的表中,然后将在其中输入的信息保存到数据库中。

    有人告诉我,实际上,它们几乎不会超过5列,但我宁愿支持N。这些列的数据类型都相同。

    我的第一个想法是创建一个XML列,其中包含所有添加列的值,但我很好奇是否还有其他人提出了更好的解决方案。建议?

    3 回复  |  直到 7 年前
        1
  •  0
  •   KM.    14 年前

    如果将此数据序列化为一列(如使用XML),则在需要对其进行搜索时会出现问题。

    如果您不需要搜索它,那么XML就可以了。

    您可以使用父子模型:

    FixedTable
    PK
    data1
    data2
    ...
    
    VariableTable
    PK - auto generate/identity
    fk - points to FixedTable.PK
    data1
    

    并且仍然能够添加索引和搜索。你的常规数据进入固定表格,任何 extra columns 用户添加,进入变量表。

        2
  •  0
  •   Jaxidian    14 年前

    您可以使用 vertical table . 有一些篮球你必须跳过去,你采取一些性能打击,但他们在这方面是非常灵活的。另外,如果您使用的是SQL Server,请检查 PIVOT command .

        3
  •  0
  •   HLGEM    14 年前

    如果必须执行此操作,请在单独的表中执行此操作,以便以后可以联接到原始表。如果必须这样做,您可以使用EAV结构,但请注意,添加n列的灵活性对性能有很大影响。在很多情况下,我说的是真正令人无法接受的表现,记录越多越糟糕。除非你确定你别无选择,否则不要沿着这条路走。

    另一种方法是,按照它们的意思添加一个表,表中有五列,分别标记为col1、col2、col3(以及其他需要链接到用户和/或其他数据表的列),并允许它们向这些列添加数据。如果每个用户要给它们命名不同的名称,则可能需要使用交叉引用表来计算列名。

    您可以将数据放入一个XML字段中,但稍后如何查询这个字段?在决定如何处理之前,你真的需要弄清楚这一点。

    一般来说,这种灵活性是个糟糕的主意。五个不同的用户将分别添加五个不同的列,这些列包含您希望一起查询的Simliar数据,但由于它们各自使用了不同的名称,所以您的数据库会变得一团糟。如果您必须有客户设计的列,那么至少要让每个客户有一个管理员来添加这些列,而不是让用户在他们认为有什么好东西的情况下进行动态添加。