Как хранить и организовывать видимость данных (общедоступных / частных / только друзей) в базе данных

#mysql #sql

#mysql #sql

Вопрос:

Я пытаюсь создать небольшую социальную сеть, и я хочу предоставить своим пользователям возможность контролировать видимость / конфиденциальность своих данных, как Facebook…

Например, они могут сделать свои данные (псевдо, город, день рождения, пол, …) частными, общедоступными или только друзьями

Я уже создал пользовательские таблицы: user, user_profiles, …

 create table user(
    id int unsigned not null auto_increment,
    pseudo varchar(64) not null,
    password char(64) not null,
    lname varchar(48) not null,
    fname varchar(48) not null,
    gender char(1) not null,
    --Other fields
    primary key(id),
    unique(pseudo)
);

create table user_profile(
    uid int unsigned not null,
    birthday date,
    phone varchar(15),
    address varchar(255),
    city varchar(64),
    postal_code varchar(10),
    -- ... Other fields
);
  

Для хранения этих данных видимости я попробовал это :

 create table data_visibility(
    id smallint unsigned not null auto_increment,
    name char(15) not null,
    primary key(id),
    unique(name)
);

create table user_visibility(
    uid int unsigned not null,
    pseudo smallint not null,
    lname smallint not null,
    fname smallint not null,
    email smallint not null,
    gender smallint not null,
    birthday smallint not null,
    -- ... Other fields
    primary key(uid),
    foreign key(uid) references user(id) on delete cascade on update cascade,
    foreign key(pseudo) references data_visibility(id),
    foreign key(lname) references data_visibility(id),
    foreign key(fname) references data_visibility(id)
    -- ... Other foreigns
);
  

Но меня не устраивают эти решения, если я изменю таблицу пользователей, добавив новые поля, мне также нужно будет обновить поля user_visibility, и все эти внешние ключи выглядят странно…

Что программисты обычно делают для решения этой проблемы?

Комментарии:

1. У меня была похожая проблема, я не говорю вам, что это хороший способ работы, но я просто не использовал внешний ключ для такого типа операций. У меня был идентификатор и группа. Поскольку он остается внутри кода, я просто предположил, что он всегда был правильным.

2. Да, похоже, что внешние ключи просто усложняют ситуацию, я думаю, мне нужно удалить таблицу data_visibility …