mysql - 管理联结表的最佳方法是什么? (删除和插入)

标签 mysql junction-table

我有两个表UsersPermissions,以及一个像这样的联结表UserPermissions(这些表是示例):

CREATE TABLE Users (
    UserLogin varchar(50) PRIMARY KEY,
    UserPassword varchar(50) NOT NULL,
    UserName varchar(50) NOT NULL
);

CREATE TABLE Permissions (
    PermissionKey varchar(50) PRIMARY KEY,
    PermissionDescription varchar(500) NOT NULL
);

-- This is the junction table.
CREATE TABLE UserPermissions (
    UserLogin varchar(50) REFERENCES Users (UserLogin),
    PermissionKey varchar(50) REFERENCES Permissions (PermissionKey),
    PRIMARY KEY (UserLogin, PermissionKey)
);

我创建了一个表单来添加和删除用户权限,但我不知道管理 UserPermissions 表的最佳方式是什么

假设用户SomeUser有3个权限:

INSERT INTO UserPermissions (UserLogin, PermissionKey)
VALUES ('SomeUser', 'TheKey') , ('SomeUser', 'TheKey1') , ('SomeUser', 'TheKey2');

但稍后(使用表单)我想更改这些权限并仅放置:TheKey1TheKey4TheKey5 (因此 TheKeyTheKey2 权限已被删除)

通过什么方式可以有效地进行此更改,我发现此解决方案有效:

DELETE FROM UserPermissions WHERE UserLogin = 'SomeUser';
INSERT INTO UserPermissions VALUES ('SomeUser', 'TheKey1') , ('SomeUser', 'TheKey4') , ('SomeUser', 'TheKey5');

有没有更好的方法同时修改五个、十个或二十个权限?

最佳答案

我认为像您一样删除所有权限然后再次插入它们是一个好方法。

如果您不想这样做,您必须知道权限是什么,并且只更新更改。这个比较复杂,错误的变化也比较大。

关于mysql - 管理联结表的最佳方法是什么? (删除和插入),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56541036/

相关文章:

database - 实体关系模型和关系模型之间有什么区别?

php - Bootstrap 日历 - 连接到数据库

mysql - Django MySQL 服务器已经消失

mysql - 使用 MYSQL 关联表和 JOIN

mysql - 在 n 个其他表之一中具有单亲的表

c# - asp.Net 如何将数据保存到 Controller 中的联结表

python - 无法使用 Python 2.7 从 django 网站连接到 MySQL,但使用 Python 2.5 可以

sql - 如何在关系数据库中存储列表并为其建立索引?

MySQL 联结表外键

c# - 如何在 EF 中配置一对多关系