DB设计用于多个不同的对象

时间:2012-09-10 11:51:55

标签: database-design

我正在开发一个用户可以使用块编写测试的应用程序。块是命令(如assignforif等),因此某些块也可以包含其他块。
我们正在使用复合模式 - 有一个abstract blockleaf& composite块类(也是抽象的),并且从相关类继承的具体块(if块是复合的,assign块是叶子。)
我们曾经将整个测试序列化并将其保存为blob,但我们正在考虑更改它(例如,在测试中启用搜索)。
那么DB设计应该怎么样?我应该为每个物体都有一张桌子吗?在我们的例子中,它将意味着大约30个表。我们应该将块的类型包含在列中吗?这意味着我们将在某处设置一个巨大的if-else开关 我很感激您的见解和建议 感谢。

1 个答案:

答案 0 :(得分:2)

您应该为每个对象提供一个表格。同一类的多个实例应该存储在同一个表的多个行中,并使用不同的数据来区分它们。

两个物体是否属于同一种类的问题可能是微妙的,特别是在你勾勒出来的情况下。这是我的建议。对要处理的所有对象进行面向对象的分析。注意区分面向对象分析和面向对象设计。如果需要,请查阅教科书。二十年前,彼得·科德(Peter Coad)在OOA上写了一些好书。

将OOA模型转换为ER模型,从混合中删除行为,并仅保留数据。保持OOA模型,因为当你去设计软件​​时,它会很有用。 ER模型可以容纳gen-spec模式,因此如果模型中有对象的类和子类,请使用此功能。在你的情况下,你会。

然后将您的ER模型转换为关系模型,以准备将关系模型转换为一系列SQL数据定义脚本。此时,类和子类变得混乱,因为关系模型没有内置继承。请参阅有关所谓“类表继承”的教程。 SO中有很多关于CTI问题的答案。

如果你正确地进行了CTI,你不需要将对象类型(类)作为一个单独的字段,但是如果它会加快速度,你可以包含它(非规范化)。除非有必要,否则我通常不这样做。