0

我有一个表格组件,其中包含可在机器中使用的部件的一般信息(参考、制造......)。但我可以有非常不同类型的部件,例如阀门、发动机……等等。所以每种类型的工件都有不同类型的规格数据。

例如,阀门具有有关其直径的信息,但发动机具有有关其功率的信息。获得有关阀门功率的信息是没有意义的。

我正在考虑两种选择。首先,要有一个包含所有规格数据的唯一表,所以我有很多字段ValveDiamter, ValveMaterial.... EnginePower,EngineType等。在这种情况下,问题是对于一块,我将拥有所有null值较小的字段带有图片类型信息的少数字段。

其他解决方案是为每种类型的零件设置一个规格表。所以我会有一张桌子ValveSpecificaiontsEngineSpecifications等等。这让我有很多桌子,但只有根据作品类型我需要的信息。

我想知道什么是最好的选择。还有其他选择吗?

4

3 回答 3

2

听起来您要在 1 个具有许多字段的表(其中大多数字段将不会用于任何一条记录)和许多具有少数字段的表(几乎总是使用大多数字段)之间做出决定。这里有几个问题可能会有所帮助:

  1. “Valve”数据会被不同的查询使用而不是“Engine”数据,还是会同时使用它们?如果您使用多表方法,那么您将不得不在联合查询中不断地将这些表串在一起,这可能很麻烦。
  2. 将存储多少数据以及访问频率如何?出于速度目的,使用较少数量的表可能会更好。
于 2012-07-16T16:10:47.327 回答
1

有几种不同的方法可以处理这样的事情:

  1. 正如你所说的是有一个大表和空未使用的属性。如果有一组共同属性和相对少量的异常值,则此方法效果很好。
  2. 为每个项目类型创建一个单独的属性表。
  3. 创建单个属性表并存储属性名称和值,并将项目 id 作为外键。
  4. 创建一个 xml 列并将属性集存储为 xml。

最好的取决于属性的总数、共有属性的数量以及属性是否需要可搜索。

于 2012-07-16T16:06:07.243 回答
1

为了做出充分知情的决定,我们需要更多信息(主要是关于如何使用它,以及各个部分如何相互关联,如果有的话),但作为一般规则,我建议使用更多表,其中仅包含适用于的列每一块。

这样做的好处是更适合于更易于使用且对许多(但不是全部!)典型使用模式更有效的作品。如果您故意对表格进行规范化,这也可能是您会看到的模式,这通常是值得的。

除此之外,它可能有助于防止某些类型的不一致(例如确保一块不接收不适用于它的属性)。

于 2012-07-16T16:32:31.717 回答