Является ли разумным хранить массивы в столбцах таблицы? Точнее, я имею в виду следующую схему, которая к моему пониманию нарушающего нормализации:Массивы в таблицах базы данных и нормализации
create table Permissions(
GroupID int not null default(-1),
CategoryID int not null default(-1),
Permissions varchar(max) not null default(''),
constraint PK_GroupCategory primary key clustered(GroupID,CategoryID)
);
и это:
create table Permissions(
GroupID int not null default(-1),
CategoryID int not null default(-1),
PermissionID int not null default(-1),
constraint PK_GroupCategory primary key clustered(GroupID,CategoryID)
);
UPD3: Я предвижу разрешения в виде строки с разделителями запятыми, поскольку MSSQL является нашим основным цели развертывания.
UPD: Забыло упомянуть, в рамках этого конкретного вопроса мы рассмотрим, что «выборку строк, которые имеют разрешения X» не будет выполнено, а все поиски будут сделаны GroupID и CategoryID только
UPD2: Я представляю типичный сценарий использования следующим образом:
int category_id=42;
int[] array_of_groups=new int[]{40,2,42};
if(!Permissions.Check(category_id, array_of_groups, Permission.EatAndDrink)) {
throw new StarveToDeathException();
}
Тхо ughts?
Заранее благодарен!
Забыл упомянуть, что в рамках данного конкретного вопроса мы будем считать, что «выборки строк, имеющих разрешение X», не будут выполняться, вместо этого все поисковые запросы будет производиться только с помощью GroupID и CategoryID. –
Пока пока вас не попросят подготовить отчет обо всех пользователях, у которых в какой-то момент есть разрешение X. –
Я почти уверен :) Однако «GroupID IN (40, 2, 42)» требует динамического SQL в MSSQL или что-то еще, что они предлагают на http://www.sommarskog.se/arrays-in-sql-2005.html. –