【问题标题】:database schema for two similar users两个相似用户的数据库模式
【发布时间】:2015-10-27 04:35:25
【问题描述】:

我对我正在制作的这个数据库架构有疑问。 我有两个相似的用户,但一个比另一个有更多的信息:

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

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

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

实现这一点最有效的方法是什么?感谢您的宝贵时间

【问题讨论】:

    标签: mysql database logging schema


    【解决方案1】:

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

    您应该有一个包含这些列的User 表:

    Id, Name, Lastname, Email, Password, IsAdmin

    使用 Student 表:

    UserId, Status, Sex, ...

    Student 也必须是 User - 这将减少数据重复。

    如果您需要比IsAdmin 更多的权限,请删除该列并创建UserPermissionsPermission 表。

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

    【讨论】:

      【解决方案2】:

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

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

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

      使用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(...)
      );
      

      【讨论】:

        猜你喜欢
        • 2011-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-24
        • 2018-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多