两个不同实体之间的SQL-ACID关系
假设有一个系统,您有三个实体:两个不同实体之间的SQL-ACID关系,sql,sql-server,database,acid,Sql,Sql Server,Database,Acid,假设有一个系统,您有三个实体: 使用者 团队(用户组) 角色 并且您希望设置一些权限关系,不管怎样,数据库中都具有灵活性,例如: 用户X可以更改用户Y的权限 用户X可以更改团队Y的权限 用户X可以更改角色Y的权限 团队X可以更改角色Y的权限 团队X可以更改团队Y的权限 角色X可以更改团队Y的权限 角色X可以更改角色Y的权限 在类似的场景中,我当前有一个具有以下模式的表: SubjectType(用户|团队|角色) SubjectId(整数-非外键) 目标类型(用户|团队|角色) Tar
- 使用者
- 团队(用户组)
- 角色
- 用户X可以更改用户Y的权限
- 用户X可以更改团队Y的权限
- 用户X可以更改角色Y的权限
- 团队X可以更改角色Y的权限
- 团队X可以更改团队Y的权限
- 角色X可以更改团队Y的权限
- 角色X可以更改角色Y的权限
- SubjectType(用户|团队|角色)
- SubjectId(整数-非外键)
- 目标类型(用户|团队|角色)
- TargetId(整数-非外键)
- 角色A配置为可以访问团队ID为X、Y、Z的团队
- 团队Y和Z被删除,其他地方没有错误
- 在查询角色A的目标时,仍然返回团队ID Y和Z
- (+)保持了一个表和单个查询的简单性 并在删除团队时手动删除团队权限条目
- (-)将需要3次手动删除操作(用户|团队|角色)。虽然将有一个单一的删除功能,可以以可重复的方式进行,但没有硬性和快速的担保
- (+)ACID保证将防止条目成为孤立项
- (-)更详细的表格,基本上相同的东西有7-9个表格
- (-)更多查询,更多联接(特别是使用类表继承时)
然而,我想知道是否有一个不同的选择,我错过了,或者是否有一些强大的经验为基础的建议对这个问题
将SQL Server 2012与此设置一起使用,但我认为这是一个常见的SQL/数据库问题。您可以对外部关系使用级联删除。因此,当主表被删除时,子表也被删除。不幸的是,subjectId和targetId只是整数而不是外键,以便一般存储(用户|团队|角色)“基于此问题的有经验的建议?”--您在征求意见吗?我建议您使用表的第二个选项,该选项具有可以利用外键关系的关系。