首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何对这种一对一关系进行建模?

如何对这种一对一关系进行建模?
EN

Stack Overflow用户
提问于 2010-04-14 19:59:15
回答 5查看 431关注 0票数 0

我有几个实体,重新呈现不同类型的用户谁需要能够登录到特定的系统。此外,它们还有不同类型的信息与之关联。

例如:“一般用户”,它有一个电子邮件地址,"admin用户“,它有一个工作站号(注意,这是一个假设的情况)。这两个实体还共享共同的属性,如名字、姓氏、地址和电话号码。最后,他们自然需要一个(唯一的)用户名和密码才能登录。

在应用程序中,用户只需填写他的用户名和密码,应用程序的功能就会根据用户的类型稍有不同。您可以想象,对于此工作,用户名需要是唯一的。

我应该如何有效地对此进行建模?

我不能只创建两个表,因为那样我就不能强制对用户名进行唯一约束。

我也不能将它们都放在一个表中,因为它们有不同类型的特定信息与之关联。

我想我可能需要3个单独的表,一个用于“用户”(带有用户名和密码),一个用于“一般用户”,另一个用于“管理员用户”,但是这些表之间的关系是如何工作的呢?还是有其他的解决方案?

(顺便说一句,目标数据库管理系统是MySQL,所以我不认为数据库系统本身支持泛化)。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-04-14 20:07:41

你的3表方法看起来还行。users表中只有ID、用户名、密码、用户类型。在常规用户表中,具有ID、UserID (来自用户表)和其他字段。管理员用户也是如此。

Usertype字段将告诉您要从哪个表中搜索其他信息

代码语言:javascript
运行
复制
if(usertype==admin)
  select * from  admins where userid=:id;
else    
  select * from  general where userid=:id;
票数 0
EN

Stack Overflow用户

发布于 2010-04-14 20:01:28

两张桌子。具有用户名、名字、姓氏等的用户。具有角色的角色,以及指向用户名(或用户id等)的链接。对用户名设置唯一约束。将工作站nbr、电子邮件、电话以及您需要的任何其他内容放入用户表中。在ROLES表中放入两列--用户in和角色。

票数 0
EN

Stack Overflow用户

发布于 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或子查询或多个左连接)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2637098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档