2010-05-07 44 views
1

我有一个PrivilegeGroup表,Privileges表和link表,因为PrivilegeGroup表和Privileges表是一个多对多的关系。我正考虑在应用程序启动时从数据库开始将PrivilegeGroup表和Privilege表的所有内容加载到内存中。我应该如何储存这些信息?

我想将它们保存在一个容易查找的表单中。通常我们会通过GroupId查找PrivilegeCode

哪种结构适合此目的?列表数组?字典?

+1

这是一个WinForms或Asp.Net应用程序吗? (或者可能是控制台应用程序或在Sharepoint中托管的工作流等)重要的是,因为我们可能会引导您使用众所周知的安全模型,而不是使用自己的本地安全模型。 (例如,标准的Asp.Net成员资格或活动目录,而不是你看起来朝向的方向。)当涉及到安全模型时,自己滚动几乎不是一个好主意。 – David 2010-05-07 19:37:24

回答

2

如何

Dictionary<GroupIdType, HashSet<PrivilegeCodeType>> 

这种方式可以通过GroupId的快速获取特权HashSet的,和做快速测试对HashSet中,以检查是否存在特权。

3

这听起来像你希望能够通过GroupId查找PrivelegeCode并且不需要任何其他数据?如果是这种情况,那么你可以使用一个Dictionary<GroupIdDataType, PrivelegeCodeDataType>这应该使查找容易。

至于在启动应用程序时一次加载它们,我想这只取决于应用程序运行时更改此数据是否对程序有任何影响,而无需重新启动它。

+0

一个GroupId将拥有多个PrivilegeCode。 – 5YrsLaterDBA 2010-05-07 20:48:16

+0

是的,起初我没有想到 - 多对多的关系 - 我会用Chris Taylor的答案(使用HashSet作为字典值)。我会编辑我的反映相同的事情,但他应该获得提供更好的答案的功劳。 – 2010-05-07 21:13:57

2

我建议你将数据保存在DataTable类的实例中。

+0

不错的建议。易于使用,易于过滤和执行查找..与字典相比,性能有所降低,但这可能可以忽略不计。 – David 2010-05-07 20:19:44