2010-05-07 2 views
1

У меня есть таблица PrivilegeGroup, таблица Privileges и таблица link, так как таблица PrivilegeGroup и таблица Privileges - это много-много отношений. Я думаю о загрузке всего содержимого таблицы PrivilegeGroup и таблицы Privilege в память из базы данных в начале при запуске приложения.Как хранить эту информацию?

Я хочу сохранить их в удобном для поиска способом. Обычно мы будем искать PrivilegeCode через GroupId.

Какая структура хороша для этой цели? массив списка? Словарь?

+1

Это приложение WinForms или Asp.Net? (Или возможно консольное приложение или рабочий процесс, размещенные в Sharepoint и т. Д.) Это важно, потому что, вероятно, мы будем направлять вас на использование известной модели безопасности, а не на использование собственного собственного. (Например, стандартное членство в Asp.Net или Active Directory, а не направление, на которое вы, похоже, возглавляете.) Роллинг по себе почти никогда не является хорошей идеей, когда речь идет о модели безопасности. – David

ответ

2

Как насчет

Dictionary<GroupIdType, HashSet<PrivilegeCodeType>> 

Таким образом, вы можете быстро получить HashSet льгот по GroupID, и сделать быстрый тест против HashSet, чтобы проверить, если привилегия существует.

3

Похоже, вы хотите, чтобы иметь возможность просматривать PrivelegeCode с помощью GroupId и не нуждаться ни в каких других данных? Если это так, то вы можете использовать Dictionary<GroupIdDataType, PrivelegeCodeDataType>, который должен сделать поиск простым.

Что касается загрузки их сразу при запуске приложения, я думаю, это зависит только от того, будут ли изменения в этих данных во время работы приложения иметь какое-либо влияние на программу, не перезагружая его.

+0

у одного GroupId будет более одного Привилегированного кода. – 5YrsLaterDBA

+0

Да, я не думал об этом сначала - отношение многих к многим - я бы пошел с ответом Криса Тейлора (используя значение HashSet как значение словаря). Я бы отредактировал мой, чтобы отразить то же самое, но он должен получить кредит за лучший ответ. –

2

Я предлагаю вам сохранить данные в экземпляре класса DataTable.

+0

Неплохое предложение. Прост в использовании, легко фильтруется и выполняет поиск. Имеет ограничение производительности по сравнению со словарем, но это, вероятно, незначительно. – David