我有“农作物”、“玉米”、“大豆”和“谷物”表。 Crop 中的一个条目对应于其他表之一中的单个条目。
裁剪应仅与其他一张表一对一,但不得超过一张。 Crop 表是必需的,因为它结合了其他表中的许多通用数据,并使代码端的信息查询变得更加容易。
有缺点的策略:
A. 将三列放入 Crop 中作为其他表的 ID,然后填充“玉米”列(如果是玉米作物等)。
缺点:浪费色谱柱;必须检查所有三列以查看它是什么作物。
B. 合并玉米、大豆和谷物表,并添加一列来表示作物类型。
缺点:每个表有不同的列;每行中浪费和不必要的列。
我该如何处理这样的情况?
这是“子类型”情况,在Stephane Faroult 的《SQL 艺术》 https://rads.stackoverflow.com/amzn/click/com/0596008945
推荐的解决方案涉及使用相同的唯一密钥(在本例中,例如CropID
)在所有表中,Crop
, Corn
, Soybean
and Grain
。主键的集合Crop
然后表成为主键的并集Corn
, SoyBean
and Grain
。此外,您定义一个属性,例如CropType
,在Crop
指示每个类型的表Crop
记录。
这样,公共属性就保留在Crop
表和特定于类型的属性进入特定于类型的表,没有冗余。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)