2009-02-03 39 views
2

我想弄清楚在我的系统中建模一组“类”的最佳方法。请注意,我不是在谈论面向对象的类,而是在回答的类别(在调查中)。因此模型是这样的:模型数据库中的异构类型

一类可以用三个不同类型的数据来定义:

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

  • 一类数字响应的(定义为一组时间间隔,其中每个间隔由一分钟的范围内,以一最大值)

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

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

我的问题是,现在一个类在技术上可以被编码和数字通过这个系统。有什么办法来定义一组表来处理这种情况?

+0

请问您是否可以详细说明您将放置这些表格的实际用途? – MatBailie 2009-02-03 14:37:06

回答

0

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

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

+0

感谢Shane,我们现在最终使用了每个子类型实现的表,并且我不确定用户会喜欢您提到的替代方案。我只是想看看是否有一些很好的优雅的方式来处理这种以另一种方式 – 2009-02-04 00:56:10

0

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

0

我不明白是什么问题。这只是混入继承。为什么一个类只能有一个ClassCoded和ClassNumeric两个条目?

业务规则的执行无论如何都不会在数据库中完成,因此您可以在业务层代码中轻松实施这些约束,并对这些表中包含条目的类使用特殊规则。

+0

我们有一个要求,一个类必须是一个,只有一个子类型。例如Age(一个带有数字类的数字变量)不应该应用于它的一类编码响应,如Marital Status(一个编码变量) – 2009-02-04 00:54:59