2011-03-07 65 views
1

对于某个应用程序,我们捕获某些表单数据。用户可以随意包含各个部分。关系数据库中的自定义类型系统

每个部分需要捕获的数据类型是每部分自定义的。有时他们是简单的键值对词典。有时它们包含具有一对多或多对多关系的子组件。虽然部分的数量可能会增加,但每个部分的模式都是已知的。

过去,表单部分是固定的,所以我们可以对每个部分的表结构进行硬编码。我们没有实现部分的通用方法 - 它是每个新部分的新数据访问和表格。

但是,新的要求说,用户应该能够设计自己的部分。为了避免动态操纵数据库表,我们希望迁移到可以在数据中表示这些部分的高阶模式。

如果数据只是单值字段的键值对,则可以使用Sections表和SectionFields表来实现。但是由于可能通过多值域和复杂类型的域来嵌套,我相信我们应该把它作为一个基本的类型系统来处理。我不认为它需要继承。

我没有重新从头开始重新创建,而是假定已经在架构中完成了存储在数据库中的高效类型系统的工作。任何想法/指导?

谢谢。

回答

1

Jason,

我不知道我理解你的问题。这是我从阅读中收集的内容摘要:

您捕获应用程序的表单数据。您的要求已更改为允许用户定义的部分。这对你来说很头疼,因为在关系型数据库中,你必须动态地改变表以适应这个新的需求。

这可能是您使用错误工具进行工作的情况。关系数据库非常适用于存储和检索具有良好建立关系的数据,但在数据中存在松散耦合关系或未定义关系时会非常糟糕。您可能会发现使用XML等技术可以更好地处理松耦合数据集的存储。

对不起,如果这不是你要找的。这是我在StackOverflow上的第一篇回复帖子,所以我仍然得到了这个问题。

祝你好运,

迈克尔

+0

嗨迈克尔,感谢您花时间回复。我也在另一个答案中写了这个 - 虽然这些部分可以是用户定义的,但它们在该用户的应用程序中一直使用。正如你所说,XML blob可能是要走的路。 –

2

如果允许用户创建自己的数据类型,那么存储它们的数据库不再是关系数据库。试图以传统方式存储这些数据将会变得混乱。

您应该考虑将此数据存储为XML snippits。如果您可以构建支持用户选择的XML模式,并且您的数据库支持XML数据类型(作为较新版本的SQL Server),那么您仍然可以对数据执行一些有用的查询。

+0

真的什么OP所要求的是一个数据库文件一样蒙戈。由于OP可能不希望迁移到全新的持久性系统,因此无论您想要什么,都可以使用XML,JSON将文档存储在SQL中。 –

+0

@Spike Gronim - 我不熟悉Mongo,但它听起来像你应该发布一个单独的答案。我认为在回答这个问题时还有更多的想法。 –

+0

虽然这些部分可以是用户定义的,但它们在该用户的应用程序中一直使用。 XML blob可能是要走的路。 –