2010-08-16 2 views
0

Приложение, которое я разрабатываю, должно обеспечивать доступ к данным на основе списка городов, определенных для каждого клиента. Клиент может иметь:Дизайн базы данных: определение контроля доступа

  • доступ ко всем городам в стране или
  • доступ ко всем городам в государственном/регионе или
  • доступа для выбора города в любом государственном или стране.

Что бы лучший способ определить это в базе данных (если БД имеет Country стол, State/область стол, City стол и Client таблицу)?

Уточнение: (Упрощенный вид таблиц с только основными колонками, относящимися к этому вопросу).

Country стол -

idCountry | Имя

таблицы состояний -

idState | idCountry | Имя

City стол -

idCity | idState | Имя

клиента стол -

idClient | Имя

ответ

0

Вы могли бы создать связанную таблицу Location собственного (Id, Name, ParentLocation) и AccessControl таблицу (ClientId, LocationId). Когда клиент связан с местоположением, вы можете предоставить доступ ко всему местоположению ниже него. Некоторые примеры:

ID Name  Parent 
------------------- 
1 World  NULL -- Need to represent all countries 
2 Brazil 1  -- A country 
3 São Paulo 2  -- A state 
4 São Paulo 3  -- A city 

Если вы хотите придерживаться текущей модели, может быть таблицей, как (ClientId, CountryId обнуляемого, StateId обнуляемого, CityId обнуляемым). Таким образом, вы можете определить свой доступ к безопасности как свое определение, но вам нужно будет иметь дело с полями с возможностью сбрасывания.

+0

Я бы предпочел, чтобы дизайн базы данных был нормализован, и метод таблицы Location мог бы победить это. Что касается второго метода - это была моя первая мысль тоже, но, возможно, есть лучшие решения? (Благодаря.) – Mysti