"Я просто хотел бы добавить еще одну вещь, вы предлагаете, чтобы у меня была таблица для каждого типа пользователя ... Я предпочитаю такой подход, однако, как бы я разработал схему, в которой я могу сказать, что отправил идентификатор пользователя 7 (admin) сообщение для пользователя с идентификатором 537 (клиент)? Или, что пользователь с идентификатором 70 (компания) получил платеж? "
Ничто не мешает вам сделать это. Иметь таблицу {сообщение получателя отправителя (-id)} с первичным ключом, всеми тремя атрибутами и двумя FK {отправителем} и {получателем}. FK ссылаются на первичный ключ таблицы, которая содержит атрибуты COMMON всех пользователей.
Теперь ваш следующий вопрос может звучать так: «но я хочу, чтобы правило гласило, что ни один пользователь типа X не может напрямую отправить сообщение любому пользователю типа Y».
Это точка, в которой любая текущая РЕАЛИЗАЦИЯ (так называемой) реляционной СУБД показывает свои слабые стороны. Даже Oracle или DB2 не могут сделать это декларативно . Мне просто слишком много нужно сказать об этом предмете, чтобы вписаться в этот ответ.
Кстати, вы, похоже, проявили интерес к моему ответу, несмотря на все отрицательные отзывы. Очень ценю это.