Система личных сообщений с 3 различными таблицами пользователей - PullRequest
1 голос
/ 05 августа 2011

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

Я пытался создать ее с помощью простой схемы БД:

id (int)
from (int)
to (int)
subject (varchar)
message (text)
timestamp (timestamp)
read (bool)
deleted_to (bool)
deleted_from (bool)

Но сложности сразу возникли из-за трех таблиц пользователей, где идентификаторы пользователей в таблице A могут иметь ID = 1, а другой пользователь в таблице B может иметь ID = 2

Любые идеи поКак создать лучшую схему БД?Спасибо

Ответы [ 4 ]

1 голос
/ 05 августа 2011

используйте столбец «модель» с типом varchar, чтобы сохранить, из какой пользовательской модели пришел пользователь.таким образом, вы можете иметь несколько записей с «2», например.модель + user_id должна быть уникальной.

например:

User1 3
User1 5
User2 3
...
0 голосов
/ 05 августа 2011

Вы можете добавить два поля в таблицу для хранения «таблицы», связанной с from и to.

0 голосов
/ 05 августа 2011

Не знаю, какой тип БД вы используете, но эту проблему легко решить с помощью наследования таблиц .

0 голосов
/ 05 августа 2011

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

Скорее всего, это не очень хорошая идея, потому что она генерирует ненужные накладные расходы, отправляя несколько запросов в базу данных. Если возможно, создайте таблицу для всех пользователей и, используя отношения «один к одному», создайте таблицы для конкретных полей. Ваши методы аутентификации будут храниться в пользовательской таблице. После проверки подлинности ваша система будет знать, какие таблицы нужно объединить для получения необходимых данных, как описано в этой однопользовательской таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...