0

在我的应用程序中,我将有一些我要插入数据库的复杂对象的列表。
该列表已附加到用户,因此我考虑将带有 ID 列表的列添加到Users表中,然后让应用程序使用 ID 列表将列表转换回复杂对象。

例如; 一个用户有 3 个SubjectsID:"2,3,23".
每个subject人都有名字,等级等......

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

问题是说实话,这听起来效率很低。
因此,我的问题是;有没有办法更有效地做到这一点?

4

1 回答 1

1

执行此操作的正常方法是为主题创建一个单独的表,并且该表具有一个用户 ID,它是返回拥有用户记录的外键。

这样您就不必为编辑逗号分隔的字符串而烦恼。它还允许您定义外键约束(只要您的数据库可以),这将阻止您插入用户表中不存在的用户 ID 的主题记录。

要加载用户的主题,您只需从主题表中检索具有用户 ID 的所有记录。

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

在这种情况下,您需要将 UserSubjectJoin 表连接到 Subjects 表以检索您指定的 UserID 的所有 Subjects 记录。

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

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

于 2013-05-19T20:01:57.670 回答