Советы по разработке схемы для социальной сети - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь придумать схему для приложения для социальной сети.

Пользователи могут публиковать сообщений , а внутри них есть Фотографии . И посты, и фотографии могут иметь лайков и комментариев . У сообщений может быть несколько соавторов / владельцев, поэтому я добавил таблицу «Участники сообщений».

Пользователи могут искать сообщения либо путем поиска по ключевым словам в текстах сообщений, либо по хештегам сообщений. Вот почему я использовал тип tsvector для обоих из них, индексированный по типу индекса GiN.

До сих пор я придумал следующую схему:

enter image description here

Мои основные проблемы с этим дизайном:

  1. Хэштеги в посте - это нормально, что я сделал, то есть - хранение хэштеговсообщение в одном столбце tsvector внутри таблицы сообщений?

    две дополнительные идеи, которые я имел в виду:

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

    b. такой же как a, но «tag_name» будет представлять собой tsvector, представляющий все хэштеги постов. Это приведет к гораздо меньшему количеству записей в таблице, чем опция «а».

  2. Сохраненные сообщения - что делать, если у меня есть 10 000 сообщений, и каждый из них будет понравиться 1 000 человек. Это приведет к 10 миллионам записей! это звучит неэффективно.

  3. Нормализация - мне кажется, что существует слишком много таблиц, для которых потребуется много СОЕДИНЕНИЙ для получения целого объекта Post для клиентов (наряду скомментарии, лайки, фотографии и их комментарии / лайки и т. д.), а также быть очень сложными для записи. Будут ли запросы на извлечение / запись различных сообщений слишком медленными / громоздкими?

  4. Комментарии - следует ли разделять комментарии для сообщений и комментарии к фотографиям, как это было сделано в схеме выше? или объединить их в один стол?
  5. Я хочу, чтобы внутри комментариев были ответы уровня 1. Должен ли я просто добавить столбец "parent_comment_id" в таблице комментариев?

1 Ответ

0 голосов
/ 30 сентября 2019
  1. Хранить хэштеги поста в одном столбце tsvector внутри таблицы Posts все хорошо, так как вы не используете его в любой другой таблице. Но в случае, если вам нужны хештеги для любого сценария, в котором вам нужно объединить таблицы, было бы лучше сохранить их в другой таблице для гибкости.

  2. Хорошо вести записи какТаким образом, вы держите право ID. Так что это не приведет к узким местам. Я полагаю, что вы собираетесь использовать CSV.

  3. Вы всегда можете оптимизировать свои запросы, использовать свои объединения с умом, убедитесь, что используете правильное объединение в нужном месте.

  4. Будет лучше, если вы разделите комментарии для постов и комментарии для фотографий, так как вам будет проще получать и хранить данные. Вы можете в любом случае объединить их при необходимости. Это позволит избежать скопления данных.

  5. Да, звучит нормально.

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