数据库中的模型异构类型

时间:2009-02-03 13:53:39

标签: sql database-design

我试图找出在我的系统中建模一组“类”的最佳方法。请注意,我不是在谈论OO课程,而是在讨论类别(在调查中)。所以模型是这样的:

可以使用三种不同类型的数据定义类:

  • 一类编码响应(其中编码响应由字符串标签和整数值组成)

  • 一类数字响应(定义为一组间隔,其中每个间隔的范围从最小值到最大值)

  • 一类字符串响应(定义为一组正则表达式模式)

现在我们有:类表(用于定义唯一类)和ClassCoded,ClassNumeric和ClassString表(所有类都带有ClassID作为Class表的外键)。

我的问题是,现在一个Class在技术上可以是这个系统的Coded和Numeric。有没有办法定义一组表来处理这种情况?

3 个答案:

答案 0 :(得分:0)

关系数据库不能优雅地处理这个问题。最简单的方法是为所有不同类型的数据定义列,并仅填充适当的列。

答案 1 :(得分:0)

有两种主要方式来处理子类型,通过为每个可能的属性添加列来使用稀疏列(最好使用检查约束以确保只有一个类型具有值)或者为超类型创建表,然后为表创建三个表子类型,每个子键都有外键返回超类型表。然后添加一个检查约束,以确保三个可能的类型列中只有一个不为空。

我个人根据子类型的相似性来决定使用哪两个实现。如果90%的列是共享的,我使用稀疏列方法,如果共享的信息很少,我会使用多表方法。

答案 2 :(得分:0)

我不明白这是什么问题。这只是mixin继承。为什么Class不能同时具有ClassCoded和ClassNumeric的条目?

无论如何都不会在数据库中执行业务规则,因此您可以在业务层代码中轻松实施这些约束,并为在这两个表中都有条目的类提供特殊规则。