Database design 表字段引用更多表的实用设计

Database design 表字段引用更多表的实用设计,database-design,orm,Database Design,Orm,我面临的挑战是为一个普通桌子设计一个好的模型。表“注释”将由不同的对象引用。一种方法,我认为是定义两个字段objecttype,objectid来记录类型和注释所属的对象。那么我不确定这是不是最好的做法。当需要生成注释列表和它们所属对象的名称时,我必须对每种对象类型进行查询,并使用并集将它们连接在一起。我想到的另一种方法是添加尽可能多的字段(只要有对象类型),并将所有这些表连接到查询中的注释。如果您对此事有任何评论,我将不胜感激 如果每个对象最多有一个注释,请在每个对象的表中添加一个可为空的no

我面临的挑战是为一个普通桌子设计一个好的模型。表“注释”将由不同的对象引用。一种方法,我认为是定义两个字段objecttype,objectid来记录类型和注释所属的对象。那么我不确定这是不是最好的做法。当需要生成注释列表和它们所属对象的名称时,我必须对每种对象类型进行查询,并使用并集将它们连接在一起。我想到的另一种方法是添加尽可能多的字段(只要有对象类型),并将所有这些表连接到查询中的注释。如果您对此事有任何评论,我将不胜感激

如果每个对象最多有一个注释,请在每个对象的表中添加一个可为空的
noteid
字段

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


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

如果每个对象最多有一个注释,请在每个对象的表中添加一个可为空的
noteid
字段

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


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

我相信您的第一种方法是正确的。或者是位于两个表之间的M2M表,用于跟踪关系

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


希望有帮助

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

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

希望有帮助