在我的应用程序中,我将要列出一些我将要插入数据库的复杂对象列表
该列表附加到用户,因此我考虑将一个带有ID列表的列添加到Users
表,然后让应用程序使用ID列表将列表转换回复杂对象。
例如;用户有3个Subjects
ID:"2,3,23"
每个subject
都有一个名字,等级等......
在运行时,应用程序将遍历每个ID并从数据库中获取其属性,并将完整主题添加到列表中。
问题是说实话听起来效率很低 因此,我的问题是; 有更好的方法吗?
答案 0 :(得分:1)
执行此操作的常规方法是为Subjects创建一个单独的表,并且该表具有UserID,该UserID是返回拥有用户记录的外键。
然后你不必乱用编辑逗号分隔的字符串。它还允许您定义外键约束(只要您的数据库可以),这将阻止您插入具有User表中不存在的UserID的Subjects记录。
要为用户加载主题,您只需使用用户的ID从主题表中检索所有记录。
如果多对多关系更合适,其中用户可以链接到多个主题并且主题可以链接到可能用户,那么您将使用连接表,例如UserSubjectJoin,其中包含每个UserID和SubjectID配对。同样,这可以有约束来确保ID必须存在于Users和Subjects表中。
在这种情况下,您需要将UserSubjectJoin表连接到Subjects表,以检索您指定的UserID的所有Subjects记录。
要完全回答您的问题,这样会更有效,因为您不必在Users表中维护一列字符串,因为您只需添加/删除Subjects表中的行,并自动更新关联。
如果你实际上有多对多的关系,那么在你的初始设计中你还需要在Subjects表上有一列UserID,这样就可以使维护加倍,并且可能会出错。