Я создаю приложение в стиле ленты новостей, которое создаст социальную сеть для компании.
Когда вы создаете статус, у вас есть возможность выбрать аудиторию, для которой статус будет виден, в этом случае это будут различные компании в этой компании.
Например, «Джон» из «Бизнес 1» хочет опубликовать статус о своих квартальных результатах, но хочет, чтобы его видели только люди из его бизнеса.
Однако «Джейн» из «Бизнеса 2» рожает ребенка и хочет, чтобы ее должность увидела вся компания (все компании).
Первоначально я планировал создать таблицу NewsFeed со столбцом аудитории, в котором содержался массив каждой компании, для которой будет виден пост. Например: [«Business 1», «Business 5», «Business 7»], и приложение проверит, содержится ли в массиве бизнес, в котором находится пользователь, если true, то будет показывать сообщение.
Я не уверен, что это самый эффективный способ сделать это и не выглядит особенно масштабируемым.
Я также рассмотрел возможность создания таблицы «NewsFeed» для каждого отдела, и в зависимости от выбранной опции аудитории при обновлении статуса он будет вставлен в эти таблицы. Однако, если у нас будет много предприятий, я думаю, это тоже может быть неэффективно?
Как лучше всего структурировать таблицы в базе данных, чтобы наиболее эффективно реализовать эту функцию?
Спасибо
Создание 2/3 таблиц будет лучшим вариантом, чем наличие одной таблицы —
Таблица 1 >> Лента новостей с колонками NewsFeedId а также NewsFeedText
Таблица 2 >> NewsFeedPublish с колонками NewsFeedId а также BusinessID
Для экономичного дизайна лучше иметь таблицу Business с BuisnessId а также Наименование фирмы но если вы не хотите создавать эту таблицу, вы можете напрямую использовать Наименование фирмы вместо BuisnessId в таблице 2.
Отношения, которые вы определяете, это отношения 1: M. Каждый статус может быть виден 0 или более бизнесу.
Я бы создал таблицу NewsFeed и таблицу Business, а затем таблицу, которая находится между этими двумя таблицами — скажем, NewsFeedBusiness.
В таблице NewsFeedBusiness у вас есть NewsFeedID в качестве внешнего ключа, который ссылается на NewsFeed, и у вас есть BusinessID в качестве внешнего ключа для таблицы Business. Я также добавил бы уникальный ключ к NewsFeedID + BusinessID, чтобы предотвратить повторное попадание записи NewsFeed в один и тот же бизнес.