Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 良好的分层权限系统设计_Database_Relational Database_Data Modeling_Datamodel - Fatal编程技术网

Database 良好的分层权限系统设计

Database 良好的分层权限系统设计,database,relational-database,data-modeling,datamodel,Database,Relational Database,Data Modeling,Datamodel,我在SQL/关系数据库中创建了一个分层数据模型 相关实体包括: 机构有一个或多个 具有一个或多个 房间 (每个房间正好有一个上级建筑,每个建筑正好有一个上级机构) 还有用户,他们可以在层次结构的任何级别上扮演某些角色。可能的角色包括: 所有者 物业经理 居住者 在层级结构的一个级别上拥有一个角色意味着在所有较低级别上授予该角色(例如,如果某人是某机构的所有者,则他们被视为该机构中所有建筑物和房间的所有者) 一些例子: 爱丽丝是一个: A1机构的所有者(因此,暗示为属于该机构的所有建筑

我在SQL/关系数据库中创建了一个分层数据模型

相关实体包括:

  • 机构有一个或多个
  • 具有一个或多个
  • 房间
(每个房间正好有一个上级建筑,每个建筑正好有一个上级机构)

还有用户,他们可以在层次结构的任何级别上扮演某些角色。可能的角色包括:

  • 所有者
  • 物业经理
  • 居住者
在层级结构的一个级别上拥有一个角色意味着在所有较低级别上授予该角色(例如,如果某人是某机构的所有者,则他们被视为该机构中所有建筑物和房间的所有者)

一些例子:

  • 爱丽丝是一个:
    • A1机构的所有者(因此,暗示为属于该机构的所有建筑物和房间的所有者)
    • 机构B中B1、B2和B7号楼的居住者
  • 鲍勃是X机构Y楼R1室的住户
  • Cindy是一名:
    • B机构B1楼物业经理
    • 机构C C3楼物业经理
    • D机构所有人
    • 机构M N楼R7、R8和R11房间的居住者

在关系数据库中跨这些实体对这些用户角色建模的好方法是什么?

好的,有什么方法?你试过什么?@philipxy Ideas:Idea1:在用户和层次结构的每个级别之间建立一个多对多角色表。例如,用户\机构\角色、用户\建筑\角色等。。然后要回答角色问题,您必须参考3个表格。Idea2:为用户创建一个表,并为层次结构的每个级别创建可选的FK。然后要查询用户在房间R上扮演什么角色,您需要首先查找R的建筑物和机构,并使用where子句,如:user_id=123和(institution_id=R_institution或building_id=R_building或room=R)。这两个似乎都不吸引人。请编辑成您的问题,评论不是为了澄清,是短暂的。2.用技术术语解释为什么不“吸引人”。另请参见常见问题解答。您需要了解的第一件事是,组与个人具有相同的超级类型。例如,用户是Postgres中的角色。另外,您希望支持继承。你不能使用db现有的角色系统吗?@deadcode你能描述一下你已经实现的解决方案吗?好的,有什么办法?你试过什么?@philipxy Ideas:Idea1:在用户和层次结构的每个级别之间建立一个多对多角色表。例如,用户\机构\角色、用户\建筑\角色等。。然后要回答角色问题,您必须参考3个表格。Idea2:为用户创建一个表,并为层次结构的每个级别创建可选的FK。然后要查询用户在房间R上扮演什么角色,您需要首先查找R的建筑物和机构,并使用where子句,如:user_id=123和(institution_id=R_institution或building_id=R_building或room=R)。这两个似乎都不吸引人。请编辑成您的问题,评论不是为了澄清,是短暂的。2.用技术术语解释为什么不“吸引人”。另请参见常见问题解答。您需要了解的第一件事是,组与个人具有相同的超级类型。例如,用户是Postgres中的角色。另外,您希望支持继承。您不能使用db现有的角色系统吗?@deadcode您能描述一下您实现的解决方案吗?