Как правильно сформировать таблицу и связи в БД?

Попалась очень сложная задача. Помогите пожалуйста.

Есть роль (user), есть категории (bank, private, work), есть права чтение/запись (read/edit). Как правильно оформить таблицы в БД и как правильно оформить связи. Как я себе это представляю на данный момент:

Role:
id: 1
title: user

Category:
id: 1
title: bank
id: 2
title: private
id: 3
title: work

readEdit
id: 1
title: read
id: 2
title: edit

Что нужно в целом, если у пользователя стоит галочка read и edit на против категории private, то все записи этой категории он может видеть и редактировать, а если только read то только видеть.

Подскажите, может кто сталкивался с таким, может где похожее есть. Буду рад любой помощи, спасибо. введите сюда описание изображения


Ответы (1 шт):

Автор решения: Akina

В терминах MySQL:

CREATE TABLE privileges ( user_id BIGINT NOT NULL FOREIGN KEY user (user_id),
                          category ENUM('bank', 'private', 'work') NOT NULL,
                          UNIQUE (user_id, category),
                          access_mask SET('read', 'edit') NOT NULL DEFAULT '');

Если список категорий динамический, то вместо поля ENUM будет поле-FK в таблицу категорий.

Если ситуация, когда edit установлено, а read нет - недопустима, то

access_mask SET('read', 'edit') NOT NULL DEFAULT '' CHECK (access_mask != 'edit')
→ Ссылка