我有几个实体,重新呈现不同类型的用户谁需要能够登录到特定的系统。此外,它们还有不同类型的信息与之关联。
例如:“一般用户”,它有一个电子邮件地址,"admin用户“,它有一个工作站号(注意,这是一个假设的情况)。这两个实体还共享共同的属性,如名字、姓氏、地址和电话号码。最后,他们自然需要一个(唯一的)用户名和密码才能登录。
在应用程序中,用户只需填写他的用户名和密码,应用程序的功能就会根据用户的类型稍有不同。您可以想象,对于此工作,用户名需要是唯一的。
我应该如何有效地对此进行建模?
我不能只创建两个表,因为那样我就不能强制对用户名进行唯一约束。
我也不能将它们都放在一个表中,因为它们有不同类型的特定信息与之关联。
我想我可能需要3个单独的表,一个用于“用户”(带有用户名和密码),一个用于“一般用户”,另一个用于“管理员用户”,但是这些表之间的关系是如何工作的呢?还是有其他的解决方案?
(顺便说一句,目标数据库管理系统是MySQL,所以我不认为数据库系统本身支持泛化)。
发布于 2010-04-14 20:07:41
你的3表方法看起来还行。users表中只有ID、用户名、密码、用户类型。在常规用户表中,具有ID、UserID (来自用户表)和其他字段。管理员用户也是如此。
Usertype字段将告诉您要从哪个表中搜索其他信息
if(usertype==admin)
select * from admins where userid=:id;
else
select * from general where userid=:id;发布于 2010-04-14 20:01:28
两张桌子。具有用户名、名字、姓氏等的用户。具有角色的角色,以及指向用户名(或用户id等)的链接。对用户名设置唯一约束。将工作站nbr、电子邮件、电话以及您需要的任何其他内容放入用户表中。在ROLES表中放入两列--用户in和角色。
发布于 2010-04-14 20:13:20
您应该确定存储了多少特定信息(或将来可能存储的信息),并基于此做出决定。如果每个用户类型只有几个字段,那么使用单个表就可以了。
用户表(名称、类型、电子邮件、密码、genfield1、genfield2、adminfield1、adminfield2)
确保包括类型字段(不要假设是因为某些特定于该用户的字段填写了该用户属于该类型)。任何查询都只需要包含"AND usertype =“子句。
如果有许多字段或规则与每种类型相关联,那么三个表的想法是最好的。
用户表(ID、类型、名称、密码)
GENUSERS (ID,genfield1,genfield2)
ADMINUSERS(ID,adminfield1,adminfield2)
表中ID之间的约束就是您所需要的(并且主USERS表保持ID的唯一性)。在大多数情况下都能很好地工作,但是包含这两种类型的用户及其特定字段的报告必须分两部分完成(联合SQL或子查询或多个左连接)。
https://stackoverflow.com/questions/2637098
复制相似问题