2009-12-15 128 views
0

我有3个表:A,B和C. 表A与B和C的关系(n:1)。 通常我在A中存储B.Id(或C.Id )和表名。表之间的关系

例如

A.ParentId = 1 
A.TableName = "B" 

A.ParentId = 1 
A.TableName = "C" 

A.ParentId = 2 
A.TableName = "B" 

这是一个很好的解决方案吗?还有其他解决方案吗?

回答

1

为什么不是2列的列?

A.ParentIdB = 1
A.ParentIdC = 3

+0

因为它不可扩展:假设有n个与A相关的表,您必须创建n列。 – user232028 2009-12-15 11:33:57

0

另一种可能性是引入另一种表内容(d),用作一个 “超” 到职位和图像。然后,评论(A)中的一行将引用帖子(B)和图片(D)中的每一行中的主键。文章和图片中的任何常见字段都将被移至内容(也许是“标题”或“日期”),那些原始表格将仅包含特定于帖子或图片的信息(可能是“主体”或“分辨率”)。这可以使执行连接比在一个字段中使用表名更容易,但这确实意味着真实世界的实体既可以是帖子也可以是评论(或者实际上,可以是帖子或评论的倍增!)。不过,真的,这取决于你试图建模的情况。

+0

听起来不错。但帮助我理解。假设有4个表:评论(A),超类型(D),帖子(B)和图像(C)。例如,检索所有相关评论很简单,但如果我需要通过评论检索特定信息(来自帖子(B)或图片(C))? – user232028 2009-12-15 11:57:04

+0

假设您想要选择与A中最后一条记录相关的特定信息(存储在B或C或...中),您怎么能这样做? – user232028 2009-12-15 13:10:26

+0

如果您不知道A是否连接到B或C,则必须执行如下操作:A内连接D左外连接B左外连接C,其中连接位于相应的键上,然后查看应用程序中的字段以确定A是否链接到B或C.您可以通过以适当的顺序排列A的键或插入日期并获取最后一条记录来获取最后一条记录。 – Rich 2009-12-15 15:27:24