MySQL数据库关系



我的SQL有一个问题,我自己无法解决,我需要帮助。我是一个初学者,也许我要问的问题真的很愚蠢和简单。

我要做的是为一个用户类别(例如:教授、学生、秘书(创建三个表,每个表都有自己的特点,并创建第四个通用";用户";桌子"用户";对于所有三个用户的全局id计数,必须只有一列。三个用户中的每一个都必须有一列指示全局id。

我所做的是:我为每个用户创建一个外键,该外键连接到"的id列;用户";。

我现在需要做的是确保;用户";id只有一个用户。换句话说,我不希望发生这种情况,例如,学生可以拥有用户id 2,教授也可以拥有用户id 2。我必须防止这种情况发生。我该怎么做?

我建议将类型添加为角色(在角色表或用户表本身中(,并添加角色(教授、学生、秘书等(。使用实体属性值模式方法为特定用户或角色添加额外属性。这样,您可以添加其他角色,每个角色都可以具有与其关联的属性。您可以将属性类型与角色表相关联,以确保该属性仅适用于特定角色,并将属性值与属性表和用户表相关联。EAV模型的一个例子

如果您的数据不重叠,即用户不能同时属于学生和教授类别,并且看起来您正在使用MYSQL。可以在所有表上使用UNIQUE关键字。https://www.w3schools.com/sql/sql_unique.asp#:~:text=%20UNIQUE%20约束%20确保%20自动%20具有%20a%20UNIQUE%20约束。

由于它是不重叠的,您的用户id将在您的用户列中是唯一的。对于其他三个表,您可以在FOREIGN KEY约束之上使用UNIQUE来获取所有唯一值,只对外键执行此操作。。。。

向用户添加category_type列。现在,教授作为category_type,用户行中有一个id。下一个索引category_type, id一起防止两个category_id - id对可以具有相同的id。

索引可以是

ALTER TABLE `user` ADD UNIQUE `unique_index`(`category_type`, `id`);

最新更新