Database design 多个不同对象的数据库设计

Database design 多个不同对象的数据库设计,database-design,Database Design,我正在开发一个应用程序,用户可以使用块编写测试。块是命令(如assign,for,if等),因此一些块还可以包含其他块。 我们使用的是复合模式-有一个抽象块和叶&复合块块类(也是抽象的),具体块继承自相关类(如果块是复合的,赋值块是叶)。 我们过去常常序列化整个测试并将其保存为blob,但我们正在考虑对此进行更改(例如,启用测试内部的搜索)。 那么DB设计应该是什么样子呢?我应该为每件物品准备一张桌子吗?在我们的例子中,这意味着大约30张桌子。我们是否应该将块的类型包含为列?这意味着我们将在某处

我正在开发一个应用程序,用户可以使用块编写测试。块是命令(如
assign
for
if
等),因此一些块还可以包含其他块。
我们使用的是复合模式-有一个
抽象块
&
复合块
块类(也是抽象的),具体块继承自相关类(
如果
块是复合的,
赋值
块是叶)。
我们过去常常序列化整个测试并将其保存为blob,但我们正在考虑对此进行更改(例如,启用测试内部的搜索)。
那么DB设计应该是什么样子呢?我应该为每件物品准备一张桌子吗?在我们的例子中,这意味着大约30张桌子。我们是否应该将块的类型包含为列?这意味着我们将在某处有一个巨大的
if-else
切换。
非常感谢您的见解和建议。

谢谢。

每种物品都应该有一张桌子。同一类型的多个实例应存储在同一表的多行中,并使用不同的数据来区分它们

两个物体是否属于同一种类的问题可能很微妙,尤其是在你勾勒出轮廓的情况下。这是我的建议。对所有要处理的对象进行面向对象的分析。注意区分面向对象分析和面向对象设计。如果需要的话,可以参考教科书。彼得·科德大约二十年前写了一些关于OOA的好书

将OOA模型转换为ER模型,从混合中删除行为,只保留数据。保留OOA模型,因为在设计软件时,它将非常有用。ER模型可以容纳gen spec模式,因此如果模型中有对象的类和子类,请使用此功能。就你而言,你会的

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

如果正确地执行CTI,就不需要将对象类型(类)作为一个单独的字段,但如果可以加快速度,可以将其包括在内(非规范化)。除非有必要,否则我一般不会这么做