1

我必须设计一个模式来存储具有许多属性但很少有共同点的对象。

我在这里找到了一些解决方案,但我仍然不相信最好的办法。我看到了四种方法:

  1. 一张表有很多字段:这可能会导致很多NULL值,并且当需要添加一些属性或修改一些数据类型时会很困难。
  2. 为每个属性创建一个新表:这使得添加和更新列变得容易,并保留了搜索功能,尽管每个SELECT都会导致大量JOIN.
  3. 为每种类型的属性创建一个表,例如:标签、数量、间隔等。我不确定在这种情况下是否需要区分浮点数、小数、整数等。
  4. 创建抽象表(我在这里读到它称为观察模式),存储属性名称和数据类型。

我应该遵循哪些标准,我应该回答哪些问题才能在这些解决方案之间进行选择?

谢谢

4

2 回答 2

1

我想说这取决于您使用的 ORM 技术和对象的序列化功能。

一般来说,我更喜欢抽象和灵活性。

于 2011-04-23T19:51:04.080 回答
0

这取决于您需要对这些属性做什么。如果属性只是间接感兴趣,那么 4 是一个非常灵活和紧凑的解决方案。我所说的间接利益是什么意思?如果您需要检索和显示属性中的信息,这是间接的。如果您需要对属性进行计算或详细操作,那么这更直接。换句话说,如果您可能在属性上使用的唯一方法是“.ToString()”,那么您可以使用 4。此架构的显着优势是允许您在不更改数据库的情况下添加新的属性类型模式,因为这些只是插入到您的属性类型表中的新行。

另一方面,如果不同的属性类型需要以依赖于它们的数据类型的方式进行操作,那么将不同类型的属性存储在一个字段中将会很痛苦。如果是这种情况,您可以执行 3.,但这也是一个问题,因为它要求您知道要转到哪个表来获取特定类型的值。这不是一个无法克服的问题,但也不是优雅的。

而不是 3. 您可以尝试一种混合方法,其中您的单个属性表有多个列,每个数据类型一个列,最好是另一个列 - 可能是计算列 - 充当“ToString”。通过这种方式,您的间接使用可以转到简单、可预测的位置,并且只有您更多涉及的应用程序需要担心针对特定属性类型转到哪一列。

于 2011-04-23T21:07:23.040 回答