【发布时间】:2013-06-07 23:52:55
【问题描述】:
我有表“作物”、“玉米”、“大豆”和“谷物”。 Crop 中的一个条目对应于其他表之一中的单个条目。这里的问题是 Crop 应该与其他表中的一个是一对一的,但不能超过一个。需要 Crop 表是因为它结合了其他表中的许多公共数据,并使查询信息在代码方面变得更加容易。通过研究这个,我有几个有缺点的策略......
A.将三列放入 Crop 以获取其他表的 ID,然后填充“Corn”列(如果它是玉米作物等)...
缺点:浪费列,每当我想查看它是什么作物时,都必须检查所有三列
B.将 Corn、Soybean 和 Grain 表组合在一起,并添加一列来说明它是什么类型的作物。
缺点:每个表都有不同的列,每行浪费和不必要的列
可以说我被困在这里了吗?还是有处理此类案件的策略?谢谢。
【问题讨论】:
-
这就是视图的用途。为您想要检索数据的每种不同方式定义一个视图,无需重复或浪费。
-
@Jesse 我不同意。当您希望能够拥有只能绑定到其中一种类型的 FK 约束时,唯一的解决方案是 1_CR 的答案中给出的超类型/子类型模式。视图不会起作用。
标签: sql-server database-design class-table-inheritance