我有几个实体,重新呈现不同类型的用户谁需要能够登录到特定的系统。此外,它们还有不同类型的信息与之关联。
例如:“一般用户”,它有一个电子邮件地址,"admin用户“,它有一个工作站号(注意,这是一个假设的情况)。这两个实体还共享共同的属性,如名字、姓氏、地址和电话号码。最后,他们自然需要一个(唯一的)用户名和密码才能登录。
在应用程序中,用户只需填写他的用户名和密码,应用程序的功能就会根据用户的类型稍有不同。您可以想象,对于此工作,用户名需要是唯一的。
我应该如何有效地对此进行建模?
我不能只创建两个表,因为那样我就不能强制对用户名进行唯一约束。
我也不能将它们都放在一个表中,因为它们有不同类型的特定信息与之关联。
我想我可能需要3个单独的表,一个用于“用户”(带有用户名和密码),一个用于“一般用户”,另一个用于“管理员用户”,但是这些表之间的关系是如何工作的呢?还是有其他的解决方案?
(顺便说一句,目标数据库管理系统是MySQL,所以我不认为数据库系统本身支持泛化)。
发布于 2010-04-14 20:52:02
我绝对不会像在GeneralUser、AdminUser和ReadOnlyUser中那样做一个有单独表的模型。
在数据库设计中,一个很好的经验法则是“跨向下跳跃”。我不会创建多个表(每种类型一个),而是创建一个SystemUsers表和一个Roles表,并定义一个连接表来将SystemUsers放入角色中。此外,我还会定义个人角色。
通过这种方式,可以将用户添加到多个角色或从中删除用户。
一个角色可以有多个权限,可以随时修改。
连接到其他地方不需要GeneralUserId、AdminUserId和ReadOnlyUserId列-只需要一个SystemUserId列。
这与ASP.Net基于角色的安全模型非常相似。
alt text http://img52.imageshack.us/img52/2861/rolebasedsecurity.jpg
https://stackoverflow.com/questions/2637098
复制相似问题