【发布时间】:2011-09-23 16:08:12
【问题描述】:
我正在创建(编辑)一个允许用户(企业)创建自己的表和字段的 ASP.NET 应用程序(SQL Server 后端)。它们都将是父表(非动态)的子表,并具有适当的 PK/FK 关系(创建表时的默认字段)。
但是,我不喜欢当前更新/插入和选择字段的方法。我将创建一个传递正确键和表名的 SP,然后让它返回正确的 SQL 语句。我认为只传递字段/值的名称/值对并让 SP 实际处理它们可能更有意义。这是最好的方法吗?如果是这样,我不擅长SP,所以有什么例子吗?
【问题讨论】:
-
听起来像是在谈论 EAV(实体-属性-值)结构。看看这里它可能会有所帮助en.wikipedia.org/wiki/Entity-attribute-value_model
-
我不久前做过的一个项目也有类似的要求。我最终使用了一个包含 2 列的表:ID (PK) 和 Data,其中 Data 是 XML 数据类型。然后我创建并存储了 XML。
-
我在这里也写过关于 EAV 的文章:sqlblog.com/blogs/aaron_bertrand/archive/2009/11/19/… EAV 受到了很多负面报道,但反对它的人并不理解并非所有模型都具有锁定模式的能力。我喜欢 EAV 而不是在 XML 中存储数据的地方在于,可以更轻松地针对痛点自定义索引(尤其是过滤索引)。
-
@JohnHartsock 感谢 EAV 的建议。我以前从不知道那个模型。我的猜测是我不会有太多的字段,也许客户会创建 25-100 个字段。如果我不期望他们创造 1,000 个,这仍然有意义吗?不过,如果我按照我原来的计划,你如何编写参数化的代码?
-
问题不在于列数,而在于它们的元数据(名称、值范围、数据类型)今天是未知的。
标签: asp.net sql-server