两个类似用户的数据库模式

时间:2015-10-26 19:10:12

标签: mysql database logging schema

我对我正在制作的这个数据库架构有疑问。 我有两个类似的用户,但其中一个有额外的信息:

Type 1 : Administrator
- Name
- Lastname
- Email
- Password

Type 2: Student
- Name
- Lastname
- Email
- Password
- Status
- Sex
- Among other type of personal information fields

所以,我在犹豫是否要制作这两个单独的表,当他们要登录时,查询它们(因为我只有一个记录屏幕),或者将它们统一为只有一个表用户,并且使用来自User的外键指向后者,使另一个称为“extra”。

实现这一目标的最有效方法是什么?谢谢你的时间

2 个答案:

答案 0 :(得分:0)

我会在登录后创建两个表并进行连接。在用户登录后缓存有关用户的额外事实。

您应该有一个包含以下列的User表:

Id, Name, Lastname, Email, Password, IsAdmin

使用学生表:

UserId, Status, Sex, ...

Student也必须是User - 这样可以减少重复数据。

如果您需要的权限超过IsAdmin,请删除该列并制作UserPermissionsPermission表。

如果您真的关心加入,那么只需将所有内容都置为可空,并在一个User表中。我怀疑它在你的用例中是否重要(这是一个更大的话题)。

答案 1 :(得分:0)

管理员是一个人扮演的角色。

学生是一个人扮演的角色。

一个人可以一次扮演一个角色,也可以多次扮演一个角色。这是一个业务规则,不应该考虑到您的数据库架构。

使用single table inheritance在同一个表中允许不同类型的角色。

create table people (
  person_id int primary key,
  given_name varchar(...),
  surname varchar(...),
  password varchar(...)--consider a `users` table instead
);

create table roles (
  role_id int primary key,
  person_id int not null references people(person_id), --use the long-hand foreign key syntax for mysql
  type varchar(...),    --admin or student
  status varchar(...),  --consider PostgreSQL over mysql, as it supports check constraints
  sex varchar(...)
);