我们的硕士论文项目正在创建一个数据库模式分析器.作为此基础,我们正在努力量化糟糕的数据库设计.
我们的主管负责分析我们选择的真实世界模式,以便我们识别一些/几个设计问题.这些问题将用作架构分析器的起点.
找到一个好的模式有点困难,因为我们不想要一个在所有方面都设计得很好的模式,而是一个更"罕见到中等"的模式.
我们已经安排了以下用于分析的模式:维基媒体,moodle和drupal.不确定每个适合的类别.架构没有必要是开源的.
使用的数据库引擎并不重要,但我们希望专注于SQL服务器,Posgresql和Oracle.
目前,文学将被推迟,因为这项任务应该给我们提供可以在论文中使用的真实世界的例子.即"设计X被我们认为是糟糕的设计,我们的分析仪确定并建议改进",而不是提出人为的例子.
当我们准备好某种工具时,我会更新这篇文章.
我在我的PHP项目中设计了一个非常简单的RBAC(基于角色的访问控制)系统,在给它一些想法之后我想出了一个解决方案,但是对于构建业务系统我不太了解我不确定是否有,或将是,我的解决方案的任何主要设计缺陷.
基本上,我想给用户一组"角色".我将使用这些角色来允许或拒绝访问应用程序上的某些功能.
这是角色表:
# Roles
- id [auto-increment, unsigned]
- role [string, length:50]
# User_Roles
- user_id [FK:user_id, unsigned]
- role_id [FK:roles_id, unsigned]
Note: user_id and role_id to be unique index
Run Code Online (Sandbox Code Playgroud)
我担心的问题是数据库中没有关于角色实际做什么的信息.但后来我开始思考这是否重要.因为如果角色具有有意义的名称和结构,那么您可以查询user_roles表以获取所有用户角色,然后在代码中使用以下内容:
# Fetch user with ID 1 from database
$user = User::find(1);
# Fetch the roles the user has from the database
# @returns : Array of roles
$userRoles = $user->roles()
# $userRoles = ['newmember', 'member.post', 'member.chat']
# Can the user send a message?
if(in_array('member.message', $userRoles)
{ …Run Code Online (Sandbox Code Playgroud)