表字段的实用设计引用了更多表

时间:2010-01-13 03:20:55

标签: database-design orm

我面临的挑战是尝试为普通桌子设计一个好的模型设计。表“notes”将由不同的对象引用。一种方法,我想是定义2个字段对象类型,对象Id来记录类型和笔记所属的对象。然后我不确定这是最好的做法。当生成一个注释列表和它们所属的对象的名称时,我必须对每个对象类型进行查询,并将它们与union一起连接起来。我想到的另一种方法是添加与对象类型一样多的字段,并简单地将所有这些表连接到查询中的注释。我将不胜感激任何有关此事的评论。

2 个答案:

答案 0 :(得分:3)

如果每个对象最多有一个音符,请为每个对象的表添加一个可为空的noteid字段。

如果没有这样的限制,最常规化的方法是为包含noteidobjectid的每个不同对象类型表创建链接表。标识符作为主键,每个标识符引用其对应的表;这也适用于一个对象链接到多个音符或一个音符链接到多个对象的情况。此外,没有引入可空字段,但查询确实变得更加复杂。为了提高性能,您可能需要双向索引每个表。

类型编码(即包括指定适用类型的列)虽然是一种非常常见的做法,但却显着削弱了数据模型的完整性。即使您使用允许值表,仍然在允许值表中的行与链接表的定义之间存在未经检查的重复。

答案 1 :(得分:0)

我相信你的第一种方法是正确的。要么是位于两个表之间的M2M表,要么跟踪关系。

从严格的数据模型角度来看,注释表中的类型是错误的,因为注释不是特定于类型的,它只是一个注释。因此,将该信息保留在M2M表中会感觉更正确。然而,M2M更难,根据您的框架,这可能是不可取的。

希望有所帮助!