管理联结表的最佳方法是啥? (删除并插入)

Posted

技术标签:

【中文标题】管理联结表的最佳方法是啥? (删除并插入)【英文标题】:What is the best way to manage a junction table? (delete and insert)管理联结表的最佳方法是什么? (删除并插入) 【发布时间】:2019-06-11 09:51:53 【问题描述】:

我有两个表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');

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于管理联结表的最佳方法是啥? (删除并插入)的主要内容,如果未能解决你的问题,请参考以下文章

设计我的 mysql 表的最佳方法是啥?我需要用偏好图代表用户

第一次将数据从其他来源插入应用程序表的最佳方法是啥?

管理 GUI 状态(创建、编辑、读取模式...)的最佳方法是啥

在多租户 Hadoop 集群中管理 impala 资源的最佳方法是啥

如何管理联结表上的插入

在 Laravel 中删除行和插入行的最佳方法是啥