多态协商(PA)对于相对简单的数据库要求是相当满意的:让各个表在一个共享表中具有子记录.典型的例子是一个单独的表,其中包含注释记录,适用于不同的不同的实体.
在this question马克做了一个很好的工作,显示了实施PA的三种常见方法.我想使用基表方法,这在更加详细的描述在一个同样出色的answer by Bill Karwin.@H_502_3@
一个具体的例子如下所示:@H_502_3@
实体的主键指基基表中相同的键值,注释表指向基表,因此遵守参照完整性.这里的关键部分是实体表的主键具有不同的域.它们通过在基表中创建新记录并将其生成的密钥复制到实体的主键来生成.@H_502_3@
现在我的问题是:如果我想在现有数据库中引用具有引用完整性的PA,如果实体生成自己的相互重叠的主键,该怎么办?@H_502_3@
到目前为止,我看到两个选择:@H_502_3@
选项1:@H_502_3@
每个实体保留自己的主键,但也会获得一个备用键.@H_502_3@
喜欢:@H_502_3@
不喜欢:@H_502_3@
>现有实体必须修改.
很难找到一个评论的拥有实体.@H_502_3@
选项二:@H_502_3@
每个实体在基表中都有自己的外键列.这看起来像马克的多列方法.@H_502_3@
喜欢:@H_502_3@
>现有实体不受影响.
>很容易找到拥有实体的评论.@H_502_3@
不喜欢:@H_502_3@
>稀疏列
>基表不稳定:引入具有PA的新实体时需要修改@H_502_3@
我倾向于选项1,可能在基表中有一个字段“EntityName”用于双向查找.哪个选项会更好.还是另一个更好的方法?@H_502_3@