假设我有一个实体,Alpha和另外两个继承自Alpha的实体A1和A2。某些约束迫使我将两个表合并为一个。但我觉得这不是一个非常好(甚至可怕)的想法(我甚至认为反模式)。问题是,除了桌子最终可能具有的巨大尺寸(许多列)之外,我还没有看到任何其他明显的问题。有人可以指出来吗?
答案 0 :(得分:0)
如果A1有A2没有的列,反之亦然(看起来很可能),你的表中会有很多NULL。
最重要的是,在我看来,A1和A2是逻辑上不同的类型,(即使它们有一个共同的部分Alpha),所以它们应该在不同的表中。
最好创建一个将表合并为一个视图的视图,同时保持它们在逻辑上分离。
答案 1 :(得分:0)
这是一种常见的情况,可以通过各种方式列入表格。将Alpha,A1和A2作为实体类型,最直接的是:
A1(a,....) fk references Alpha // a is of type A1 and ...
A2(a,....) fk references Alpha // a is of type A2 and ...
Alpha(a,...) // a is of type Alpha and ....
(可能存在约束检查A1(p,...)意味着不是A2(p,...)和/或A2(p,...)意味着不是A1(p,...)。)
Alpha是A1或A2类型或其他类型的东西。 ("继承Alpha和#34;并没有说明这一点。)表A1和& A2每列都有唯一的列; Alpha,共享列。
主题是带表格的子类型和超类型。了解它。
修改
nulls的问题在于,无论何时你想要查询上述三种类型的实体,你都要提取这些表,除非在查询表达式的叶子附近删除空值,否则它们很快会导致无法管理的复杂和不直观查询含义。请参阅this example of how nulls complicate table meanings。