Дизайн базы данных - пользователи и их конфиденциальность - PullRequest
4 голосов
/ 06 марта 2011

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

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

Мой вопрос таков: какой подход был бы лучше для этого?

Что вы мне порекомендуете, создать новое свойство для каждого свойства, которое я хочу, чтобы пользователи управляли конфиденциальностью?

Пример таблицы «Пользователи»:

-Id

-Email

-Телефон

-ShowEmail (int) и 0 будет ни для кого, 1 для зарегистрированных пользователей и 2 для друзей

-ShowPhone (int)

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

Спасибо!

Редактировать: конфиденциальность - это не просто свойства. Мне нужно будет обработать события, которые подписал пользователь, фотографии, на которых он отмечен и т. Д.

1 Ответ

2 голосов
/ 06 марта 2011

Это возможно, но это делает вашу таблицу очень большой и с довольно избыточными полями. У вас есть два варианта, которые лично мне нравятся больше:

  1. Используйте поле flag . Преимущество состоит в том, что вам нужно только 1 поле, недостаток в том, что он как бы идет вразрез с хорошими практиками реляционных БД и что запросы становятся более расплывчатыми, если вы хотите что-то выбрать из него.
  2. использовать другую таблицу только с 3 полями, например «UserID», «FieldName» и «ShowTo», последний является ENUM (или целым числом, если вам это нравится больше). Это больше работы, но совершенно ясно и imho намного лучше.

Запросы будут выглядеть примерно так: 1.

SELECT phone, (privacyFlags&8) AS showPhone FROM users

2

SELECT user.phone, privacy.ShowTo AS showPhone FROM users
    JOIN privacy ON privacy.userID=users.userID
WHERE privacy.FieldName = 'phone'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...