【发布时间】:2011-07-05 15:07:59
【问题描述】:
我正计划构建一个必须允许用户动态设置自己的数据模型(即创建字段、数据结构等)的应用程序。
我面临着几种技术可能性,都有缺点。 :
- 在管理屏幕中,更新数据库的 SQL 模式以反映更改。
- 我担心这是一个非常糟糕的主意,因为应用程序必须拥有数据库上的权限。而且,如果每次点击都必须应用一个新的 sql 模式,我想我会直接跑一个洞。这是我在大多数用户可自定义的应用程序中看到的方法。
- 在 DB 模式中创建一组通用的额外列,并希望有足够的列用于复杂的数据模型。
- 如果我的应用中不能允许超过 X 列,这很快就会成为功能限制
- 将所有具有 ID 列和 Xml 列的项目存储在一个表中,以存储用户定义的列。
- 这种方法可能会消除前面提到的缺点,因为 sql 架构将保持静态,但由于 EF(我希望能够使用)不知道如何管理 xml 数据类型,我最终将不得不要么手动使用带有 XML 函数的 SqlCommand,要么编写自定义 EF 提供程序,我想这将是很多工作。
- 这是 Microsoft 为 SharePoint 选择的方法...这让我认为它是更好的方法(或至少不那么糟糕)
- 创建一个“属性”表,其中基本上包含一个 itemId 列、一个属性名称列和一个属性值列
- 这种方法意味着一个非常大的表(X 项 * 每个项的 Y 属性)
- 我必须以纯文本形式存储我的值,即使它是数字的。
我的要求是:
- 保持代码可维护、可单元测试和所有老式技术
- 拥有包含大量数据的响应式应用程序
- 拥有尽可能安全的应用程序
- 允许用户完全自定义他们的应用程序(创建自定义视图,对用户属性进行过滤/排序)。
我觉得现在选择正确的设计一定是好的,因为后者很难改变。
任何反馈将不胜感激
【问题讨论】:
-
好主意,可能有用,但你的意思是动态它确实包括删除字段/属性?
-
@eSPiYa:是的...“完全可定制”...只有一些字段是必需的(id、creator 等),其他必须添加/删除/更新/等。按用户
-
如果您对使用 XML 数据类型的方法感兴趣,我可以给您一个示例,如何使其在 EF 中工作。我喜欢将自定义视图序列化为 XML 的想法。
-
@J. Tihon:是的,我当然感兴趣 :)
-
@Steve B:我有一个想法,但在我能够发布之前,我发现 AdaTheDev 的建议要好得多。这是我第一次听说 NoSQL,但根据 Wikipedia 关于它的条目,它比 RDBMS 快得多,而且 Facebook 已经在使用它来处理 50TB 的海量数据存储。只需学习如何使用它并在单元测试之外执行批量测试,因为这是一项新技术,您不希望因为存储的大量数据而崩溃您的应用程序。
标签: c# database-design architecture