MySQL:存储用户类型和用户类型id的最佳方式是什么?

MySQL:存储用户类型和用户类型id的最佳方式是什么?,mysql,sql,database-design,Mysql,Sql,Database Design,我为商店用户、学生和考官创建了3个表 用户表包含登录详细信息 id name email password user_type (3 user types: 1 - administrators, 2 - students, 3 - examiners) user_type_id id name age birthday id name age qualifications 如果user\u type==2或3,则基于该值,user\u type\u id字段获取 学生id或考官id,如

我为商店用户、学生和考官创建了3个表

用户表包含登录详细信息

id
name
email
password
user_type (3 user types: 1 - administrators, 2 - students, 3 - examiners) 
user_type_id
id
name
age
birthday
id
name
age
qualifications
如果user\u type==2或3,则基于该值,user\u type\u id字段获取 学生id或考官id,如果用户类型=1,则值=0

学生表包含学生详细信息

id
name
email
password
user_type (3 user types: 1 - administrators, 2 - students, 3 - examiners) 
user_type_id
id
name
age
birthday
id
name
age
qualifications
考官表包含考官详细信息

id
name
email
password
user_type (3 user types: 1 - administrators, 2 - students, 3 - examiners) 
user_type_id
id
name
age
birthday
id
name
age
qualifications
我的问题是,使用上述方法链接用户、学生和考官可以吗


如果没有,请建议一种方法。谢谢。

首先,您的数据模型需要一些改进

  • 您在学生中添加了年龄属性和生日属性。在数据库中添加年龄不正确。你应该只使用生日。考官也有同样的问题
  • 为具有身份验证(和授权)的信息系统设计数据模型的最佳实践是在数据模型中将它们分为两个模块。AA模块和信息系统的其他部分。这种分离具有一些优点,如整个系统的可扩展性和AA在其他系统中的可用性等
  • 另一个改进是定义一个名为UserType的新实体,并在Users实体中使用外键
  • 当您在用户实体的一个属性中同时使用学生ID和考官ID时,您的模型是非正常的,并且您不能设置外键
    其次:提供数据模型

    我们在用户和其他两个实体(学生和考官)之间有关系。也许将来会有其他实体加入到这个列表中。
    我们有两种关系: 用户和学生之间的一种关系以及用户和考官之间的另一种关系
    这些关系是一对一的。例如,每个学生有一个用户,每个用户只能为一个学生设置。以及用户和检查之间的类似声明

    在一对一关系中,我们有两种解决方案:
    1-将1-1关系中第1方实体的主键作为外键传递给 第二方的实体
    2-将1-1关系中第2方实体的主键作为外键传递给 第1方的实体

    这两种解决方案都是正确和正常的。因此,对于这种情况,我们有两种解决方案:

    解决方案1:将用户ID作为外键传输给学生和考官。在这个解决方案中,我们可以很容易地找到特定学生或特定考官的每个用户ID此解决方案的难点在于根据用户ID查找学生或考官。答案是:请注意,每个用户ID都有用户类型。因此,根据用户ID的用户类型,我们知道要搜索哪个表(学生或考官)


    解决方案2:将学生和考官ID作为外键传输到用户中。这意味着用户实体有2个外键。第一个用于学生ID,第二个用于考官ID。此解决方案非常有效。但它与AA模块(身份验证和授权模块)的模块性相冲突。当与用户相关的其他表(学生、考官等)数量较多时,就会出现另一个问题。无论如何,在小型信息系统中,我们可以使用此解决方案。

    只是一个建议:在表
    学生
    考官
    中放置
    用户id
    不是更好吗?与从
    用户
    学生
    /
    考官
    的参考不同,另一种方法是。如果您计划有大量记录,则可以进行一些优化(如果表不庞大或结构不打算更改,则此时优化没有实际意义)。其概念是在
    用户
    中汇集所有人共有的所有数据(
    姓名
    年龄
    )。然后,您可以使用一个带有
    id
    (索引)
    user\u id
    field\u type
    field\u id
    的表,而不是固定的变量表(学生/考官)。第三列取决于结构是固定(类型)还是动态(id)。如果是动态的,您将有第三个表重新接收这些字段,然后您可以添加。