首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据库设计:用户表和关系

数据库设计:用户表和关系
EN

Database Administration用户
提问于 2020-03-15 20:44:09
回答 1查看 4.3K关注 0票数 0

我正在为一个小型学校项目设计一个数据库,但目前正在为用户表及其相关表的设计而奋斗。

基本上:

  • 用户可以是学生、教师或管理员。
  • 学生、教师和管理员共享一些共同的数据(姓名、last_name、登录日期),但每种类型都有独特的信息(教师有专业许可证;学生有一个与他们的配置文件相关联的Carrer,等等)。

所以我被两个设计困住了。第一个问题如下:

这个方法允许我在每种类型的表中有唯一的字段(不在图像中列出),但是问题在于字段的复制。

第二种方法是拥有一个用户表和一个第二个User_data表(而不是第一个设计中的三个分开的表),但我认为这会造成另一组问题,比如,如果当前寄存器是一个学生、教师或管理员,则具有空值。

对如何改进这一设计有什么建议吗?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2020-03-15 21:15:51

以下是我认为非常普遍的一个想法:

代码语言:javascript
运行
复制
CREATE TABLE users
( user_id ... not null PRIMARY KEY
, user_name ... not null UNIQUE
, surname ... not null
, ...
, user_type ... not null
,     CHECK (user_type IN ('T','S','A'))
,     UNIQUE (user_type, user_id)
);

CREATE TABLE teachers
( user_id ... not null PRIMARY KEY
, license --- not null UNIQUE
, ...
, user_type ... not null
,     CHECK (user_type = 'T') 
, FOREIGN KEY (user_type, user_id)
      REFERENCES users (user_type, user_id)
);

为学生和管理员提供类似的表格。

若要确定教师的姓名,请与用户联系。

检查约束在您的MySQL版本中可能不可用,您可以使用域表的外键实现相同的功能。

以上所有假设-例如,教师和学生-是不相交的。

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

https://dba.stackexchange.com/questions/262008

复制
相关文章

相似问题

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