Каков наилучший способ управления распределительной таблицей? (удалить и вставить) - PullRequest
0 голосов
/ 11 июня 2019

У меня есть две таблицы Users и Permissions, а также таблица соединений 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');

Но это позже (с формой) Я хочу изменить эти разрешения и поставить только: TheKey1, TheKey4, TheKey5 (поэтому есть TheKey и TheKey2 разрешения, которые были удалены)

Каким образом я могучтобы сделать это изменение эффективно, я нашел это решение, которое работает:

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

Есть ли лучший способ изменить пять, десять или двадцать разрешений одновременно?

1 Ответ

0 голосов
/ 11 июня 2019

Я думаю, что удаление всех разрешений, а затем вставка их снова, как и вы, является хорошим подходом.

Если вы не хотите этого делать, вы должны знать, какие у вас были разрешения, и только обновлять изменения. Это более сложно, и изменение для ошибок больше.

...