我有一个使用(简化)表用户和表超级用户设置数据库的情况。两者都有一个列 ID。每个 SuperUser 行在 User 表中都有一行具有相同的 Id 值(不是我的设计!!!)。SUperUser 表不会从 User 表中提取公共信息,它会复制它。
是否可以/应该指向 User.Id 的任何外键也与 SuperUser.Id 具有 FK:PK 关系?我对此的看法是,这至少是一个非常糟糕的主意,并且许多(大多数?)数据库无法强制执行这种关系/
我在这儿不准吗?
我有一个使用(简化)表用户和表超级用户设置数据库的情况。两者都有一个列 ID。每个 SuperUser 行在 User 表中都有一行具有相同的 Id 值(不是我的设计!!!)。SUperUser 表不会从 User 表中提取公共信息,它会复制它。
是否可以/应该指向 User.Id 的任何外键也与 SuperUser.Id 具有 FK:PK 关系?我对此的看法是,这至少是一个非常糟糕的主意,并且许多(大多数?)数据库无法强制执行这种关系/
我在这儿不准吗?
根据我对您的问题的理解,您将遇到两个主要问题,即同时为 User 和 SuperUser 表设置外键。
除非用户在两个表中,否则您将无法使用这样设置的外键输入或更新任何表,因为外键期望用户 ID 存在于它们中。
如果您使用级联删除设置外键并从 SuperUser 中删除记录,则具有该设置的所有表都将删除与该用户 ID 关联的记录,可能只留下 User 表中的记录和所有其他信息丢失。
更好的选择是将 SuperUser 表中的 userid 列设置为 User 表中 userid 列的外键,这样您就不会遇到用户不在两个表中或从中删除用户的问题超级用户表。
由于每个用户在用户表中都有一条记录,并且我假设并非每个用户都是超级用户,因此我只会按用户引用它们并在需要时检查他们是否是超级用户。
如果可能的话,最好删除重复的字段。随着事情的发展,这很容易成为一场噩梦。