数据库设计:定义访问控制

时间:2010-08-16 09:43:22

标签: database normalize

我正在开发的应用程序需要根据为每个客户端定义的城市列表提供对数据的访问。客户可以:

  • 访问某个国家/地区的所有城市或
  • 访问州/地区的所有城市或
  • 访问任何州的选定城市 或国家。

在数据库中定义此方法的最佳方法是什么(如果数据库有国家表, / 区域表, 城市表和客户表)?

澄清: (表格的简化视图,仅包含与此问题相关的基本列)。

国家/地区表 -

  

idCountry |名称

州名表 -

  

idState | idCountry |名称

城市表 -

  

idCity | idState |名称

客户表 -

  

idClient |名称

1 个答案:

答案 0 :(得分: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 nullable,StateId nullable,CityId nullable)。这样您就可以将安全访问定义为定义,但需要处理可空字段。