#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 …