数据库与实体框架中的许多表和表示的关系

时间:2009-10-18 18:23:08

标签: database entity-framework database-design data-modeling

2部分问题:

第一 在给定以下场景的情况下,建立表/关系结构的最佳方法是什么:我有许多表存储不同类型的数据(即:书籍,电影,杂志 - 每个都作为不同的表),然后是一个存储可以评论的表链接到任何表类型。因此,评论表中的一行可以链接到书籍或杂志表。

我现在的方法是,有一个第3个表定义了可用的表并给它们一个ID号。最终没有存储从评论到书籍的真实关系。这是最好的方法吗?

第二 我如何在实体框架中表示虚假关系?我可以做一个可以连接3个表的查询,但是有没有办法在表映射中对它进行建模呢?

3 个答案:

答案 0 :(得分:2)

另一种思考方式是将BOOKS,MOVIES,MAGAZINES视为REVIEWABLE_ITEMS的子类型。它们可能具有一些共同特征 - 如果不了解您的问题域,就很难确定。这种方法的优点是您可以将REVIEWS建模为REVIEWABLE_ITEMS的依赖项,为您提供单个表,用于评论可强制执行的关系。

修改

是的,这就像在OO范例中扩展类型一样。您没有说明您打算使用哪种数据库,但this article by Joe Celko显示了如何在SQL Server中执行此操作。完全相同的实现在Oracle中有效,我希望它也适用于大多数其他RDBMS产品。

答案 1 :(得分:1)

这实际上取决于您希望如何访问/查看评论。

我会为每种启示实施一张表:一张用于书籍,一张用于电影等,每张都有一对多关系(书籍和书籍评论,电影和电影评论之间等) 。如果您需要在一个表中进行所有评论,请创建一个视图,用UNION ALL选择所有评论。

答案 2 :(得分:0)

您要么包含“可审核”的概念,可以是书籍,杂志或......,以及“评论”可以参考的概念,否则您可以拥有“审核”概念,这可以是可以参考书籍的“书评”,或可以参考杂志的“杂志评论”,或可以参考报纸的“报纸评论”......

因为真正的关系系统不存在,所以你不能不在数据库设计中明确这两个抽象中的一个。 (除非您愿意实施大量触发器代码。)