关系数据库中的自定义类型系统

时间:2011-03-07 21:58:49

标签: sql type-systems

对于应用程序,我们捕获某些表单数据。用户可以随意包含各个部分。

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

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

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

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

我认为在存储在数据库中的高效类型系统的模式中已完成工作,而不是从头开始重新构建。有什么想法/指导吗?

感谢。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

杰森,

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

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

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

很抱歉,如果这不是你想要的。这是我在StackOverflow上的第一篇回答帖子,所以我仍然掌握这一点。

祝你好运,

迈克尔