1

我有表格“作物”、“玉米”、“大豆”和“谷物”。Crop 中的一个条目对应于其他表之一中的单个条目。这里的问题是 Crop 应该与其他表中的一个是一对一的,但不能超过一个。需要 Crop 表是因为它结合了其他表中的许多公共数据,并使查询信息在代码方面变得更加容易。从这个工作中,我有几个有缺点的策略......

A. 将三列放入 Crop 以获取其他表的 ID,然后填充列“Corn”(如果它是玉米作物等)...

缺点:浪费列,每当我想查看它是什么作物时,都必须检查所有三个列

B. 合并 Corn、Soybean 和 Grain 表,并添加一列来表示它是什么类型的作物。

缺点:每张表有不同的列,每行浪费和不必要的列

可以说我被困在这里了吗?还是有处理此类案件的策略?谢谢。

4

2 回答 2

2

这是“子类型”的情况,并在Stephane Faroult 的 SQL 的艺术中广泛介绍

CropID推荐的解决方案包括在所有表、、Crop和中使用相同的唯一键(在本例中为) 。表的主键集然后成为 和 的主键的并集。此外,您在表上定义一个属性,例如 ,指示每条记录的类型。这样,公共属性保留在表中,特定类型的属性转到特定类型的表,没有冗余。CornSoybeanGrainCropCornSoyBeanGrainCropTypeCropCropCrop

于 2013-06-08T00:28:34.317 回答
0

为什么不是所有表的数据透视表,例如:

 PivotTable -> PivotID, PivotDate
 Crop->CropID, PivotID, other fields
 Soybean->SoybeanID, PivotID, other fields
 Gran->GrainID, PivotID, other fields

因此,您可以选择只有一个 PivotID 的所有表

于 2013-06-08T00:00:24.447 回答