使用 SQL 生成用于帐户设置的唯一访问密钥



我正在尝试为我正在编写的应用程序生成/验证唯一访问密钥的有效方法。我遇到的问题是因为SQL数据库的设置方式。

基本上,有两个有问题的表。Users表和Faculty表。Users表和Faculty表之间存在一对多关系。每个用户只需使用个人电子邮件和密码即可创建一个帐户。这将在Users表中创建一个条目。

现在,我想允许管理员输入电子邮件和名称,并生成安装密钥。然后,用户将能够输入该访问键,该访问键将他们在Users表中的行链接到Faculty表中具有user_id外键的行。

我考虑这样做的方式是,当管理员生成设置密钥时,它将在教师表中创建一个具有空外键的行。然后,用户必须输入设置密钥管理员输入的电子邮件。假设全部匹配,则会将其user_id添加到该外键列中。

这就是问题/问题所在。使用包含设置键和电子邮件的单独表作为查找表,并且在向faculty表添加行之前仅搜索具有两列的表会更有效吗?我认为这可能会更快,因为一旦验证行就可以删除,每次搜索的行更少。另外,我不确定在我的第一种方法中保留外键 null 是否存在问题。

假设有一个唯一的密钥/电子邮件对,这是否足够安全,或者我还需要某种方法来检查登录用户?

任何资源或想法都非常感谢。

我怀疑如果您为此目的创建一个单独的表,性能会有很大的好处,但它对数据完整性有很大的好处。为每个允许的访问创建新的教职员工记录会导致冗余,因为您将不得不在多个记录中添加相同的教职员工,从长远来看会产生大问题,处理所有冗余变得更加困难,最终导致不一致。因此,初始方法将违反数据库规范化的概念。如果您有一个用于用户的表、一个用于院系的表和另一个用于users_of_faculties的表,您将获得更好的结果。如果需要,这将允许用户访问更多院系,并且每个用户,每个教职员工将恰好在一个地方创建,当某些院系的某些用户被授予、修改或撤销访问权限时,他们的关系将更频繁地更改。

最新更新