将复杂对象列表插入数据库

本文关键字:插入 数据库 列表 对象 复杂 | 更新日期: 2023-09-27 18:14:23

在我的应用程序中,我将有一个复杂对象的列表,我将插入到数据库中。
该列表附加到用户,所以我考虑在Users表中添加一个包含id列表的列,然后让应用程序使用id列表将列表转换回复杂对象。

例如

;用户有3个Subjects id: "2,3,23"
每个subject都有名称、等级等…

在运行时,应用程序将遍历每个ID并从数据库中获取其属性,并将完整的主题添加到列表中。

老实说,问题是这听起来效率很低。
因此,我的问题是;是否有更有效的方法?

将复杂对象列表插入数据库

通常的方法是为subject创建一个单独的表,并且该表具有UserID, UserID是返回到所属User记录的外键。

那么您就不必为编辑逗号分隔的字符串而烦恼了。它还允许您定义外键约束(只要您的数据库可以),这将阻止您插入具有UserID的subject记录,该记录不存在于User表中。

要为一个用户加载Subjects,只需从Subjects表中检索带有User Id的所有记录。

如果多对多关系更合适,其中一个用户可以链接到多个主题,一个主题可以链接到多个用户,那么您将使用连接表,例如UserSubjectJoin,其中包含每个UserID和SubjectID配对。同样,这可以有约束,以确保id必须存在于Users和Subjects表中。

在这个场景中,您需要将UserSubjectJoin表连接到Subjects表,以检索您指定的UserID的所有Subjects记录。

为了完整地回答您的问题,这将更有效,因为您不必在Users表中维护一列字符串,因为您只需从Subjects表中添加/删除行,并且关联会自动更新。

如果您实际上有一个多对多关系,那么在您的初始设计下,您还需要在Subjects表上有一列userid,这将使维护加倍,并且有出错的风险。