powered by simpleCommunicator - 2.0.47     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование базы для соц. сети
25 сообщений из 30, страница 1 из 2
Проектирование базы для соц. сети
    #40051455
Elfix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую!

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

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

Таблица users:

id
displayName
birthday
gender
professional_id
deleted
blocked
block_reason

Таблица users_uids:

uid
user_id
deleted
blocked
block_reason

Таблица persons

id
displayName
personType (professional or center)
deleted
blocked
block_reason

Таблица professionals:

id
personID
gender
birthday

Таблица centers

id
personID
registrationDate

Таблица photos

id
personID
link
deleted

Таблица students

id
personID
professional_id
course_id
progress

Идея в том, что есть мастер таблица persons, в которой хранятся и конкретные профессионалы и учебные центры.
Профессионалы могут обучать других профессионалов, а учебные центры могут также заниматься образовательной деятельностью и нанимать на работу людей из таблицы professionals. Для примера есть таблийа photos. Владельцем фото может быть как прлфессионал, так и учебный центр.

Таблица users нужна, чтобы войти в систему.
А таблица users_uids хранит uid для каждого пользователя, чтобы он мог зайти или через соц сеть или через email (проверка происходит на стороне firebase и на клиенте и на сервере).

Интуитивно мне кажется, что таблица users в этой структуре лишняя и можно ограничиться таблицей professionals, а users_uids можно переименовать в professionals_uids.

Смущает, что поля gender и birthday дублируются в users и professionals и при определенных условиях могут противоречить друг другу.

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

Как оптимальнее организовать базу?

Модератор: Тема перенесена из форума "PostgreSQL".
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051498
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elfix
deleted
Elfix
deleted
Elfix
deleted
Elfix
deleted

Elfix
Как оптимальнее организовать базу?
Выкинуть.
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051503
Elfix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat

Elfix
Как оптимальнее организовать базу?
Выкинуть.


fkthat, если у Вас больше идей нет, предлагаю Вам далее не участвовать в обсуждении этой темы.
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051504
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elfix,
а есть компьютер под руками?
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051505
Elfix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinov,

что Вы имеете ввиду?
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051506
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elfix,

ну что спросил то и имею ввиду -
все что написано
авторнесколько связанных между собой табличекэто на бумаге или есть реальная База Данных?
какая СУБД? CREATE TABLE ... чтобы легче думалось...
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051538
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elfix
fkthat

пропущено...
Выкинуть.


fkthat, если у Вас больше идей нет, предлагаю Вам далее не участвовать в обсуждении этой темы.
К сожалению, fkthat прав. Структура настолько плоха, что ее можно только выкинуть. Если такой ответ вас не устраивает, я могу тоже не участвовать в дальнейшем обсуждении. Мне совсем не сложно

Если же мне позволено остаться, то могу порекомендовать почитать что-нибудь про нормальные формы для начала. Потом опишите словами ту область деятельности, в которой будет использоваться ваша БД. Потом в описании нужно будет выделить основные сущности и их атрибуты. Далее, в первом приближении можно считать, что сущности будут таблицами, а их атрибуты - полями.
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051540
Elfix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никанор Кузьмич,

почему, же оставайтесь, участвуйте.
Но если Вам не сложно высказывайтесь по существу и конкретно.

1. Что конкретно плохого в такой структуре?
2. Что конкретно почитать и что в вашем понимании является нормальными формами?

Для удобства восприятия вкладываю схему связей таблиц.
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051553
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elfix
что в вашем понимании является нормальными формами?
Это не в "моем понимании". Это стандартная терминология из реляционной теории: Нормальная форма .

Elfix
Что конкретно почитать
К. Дж. Дейт, "Введение в системы баз данных". Нормальные формы - до третьей и НФБК включительно, остальное вряд ли понадобится.

Elfix
Что конкретно плохого в такой структуре?
Конкретно плохое - это когда можно ткнуть в какое-то место и сказать: "Вот тут исправить вот так". В вашем случае из 8 присутствующих таблиц 6 нужно слить в одну, и добавить пару-тройку таблиц справочников. Это, по факту, и есть "выкинуть всё и сделать заново".
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051559
Elfix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никанор Кузьмич

Конкретно плохое - это когда можно ткнуть в какое-то место и сказать: "Вот тут исправить вот так". В вашем случае из 8 присутствующих таблиц 6 нужно слить в одну, и добавить пару-тройку таблиц справочников. Это, по факту, и есть "выкинуть всё и сделать заново".


Ткните уже, наконец, в конкретное место и подскажите как исправить.
В этом же и заключается мой вопрос... Избыточные, ненормализованные данные, я пока обнаружил в таблицах users и professoonals, и именно поэтому я и задался вопросом, что мне кажется, это можно было бы оптимизировать. Но как, не очень понимаю, ведь пользователем системы может быть любой человек, а вот участником таблицы professionals, не каждый.

Я потратил на эту схему 3 минуты своего времени. Мне правда не жалко её выкинуть и сделать новую.
Но вы конкретнее можете сказать как она должна выглядеть по-новому? Уверен, что вы потратите на эту задачу времени не больше.

В конце концов тема о проектировании базы...
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051572
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elfix
Ткните уже, наконец, в конкретное место и подскажите как исправить.
Откуда мне знать, как исправить? Вы же не предъявили никакой внятной постановки задачи. Все, что есть - это вот это:
Elfix
спроектировать базу данных для социальной сети, где встречаются ученики и учителя в одной профессиональной отрасли.
В такой постановке я не вижу никакой необходимости в большинстве ваших таблиц, нужно можно оставить courses, users и centers, если они дороги вам как память. А уж про поля, связи, констрейнты (которых нет) и DDL (которых тоже нет) я вообще молчу.

Elfix
Но вы конкретнее можете сказать как она должна выглядеть по-новому? Уверен, что вы потратите на эту задачу времени не больше.
Выдумывать за вас постановку задачи я не собираюсь.
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051579
Elfix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никанор Кузьмич

Откуда мне знать, как исправить? Вы же не предъявили никакой внятной постановки задачи.

Читайте внимательнее тогда, дублирую:
ElfixИдея в том, что есть мастер таблица persons, в которой хранятся и конкретные профессионалы и учебные центры.
Профессионалы могут обучать других профессионалов, а учебные центры могут также заниматься образовательной деятельностью и нанимать на работу людей из таблицы professionals. Для примера есть таблийа photos. Владельцем фото может быть как прлфессионал, так и учебный центр.

Таблица users нужна, чтобы войти в систему.
А таблица users_uids хранит uid для каждого пользователя, чтобы он мог зайти или через соц сеть или через email (проверка происходит на стороне firebase и на клиенте и на сервере).


Когда Вы писали
Никанор КузьмичВ вашем случае из 8 присутствующих таблиц 6 нужно слить в одну, и добавить пару-тройку таблиц справочников.


Что вы имели ввиду? Можно пример?
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051583
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElfixЧто вы имели ввиду? Можно пример?

У вас "конкретные профессионалы и учебные центры" не являются пользователями и не могут
входить в систему? Тогда откуда будет получаться информация о них? "Пользователь Дядя Вася
считает, что его сосед Петя - крутой профессионал и его надо нанимать", так что ли?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051585
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elfix,

если ограничится описанием предметной области в первом вашем сообщении, то выходит следующее:
1. есть человек (люди), таблица persons (там фио, пол, день рожд и так далее)
2. этот человек может выступать в качестве преподавателя и студента, причем одновременно
3. преподаватели и студенты - они относятся к определенным учебными центрам при этом каждый препод и каждый студент может преподавать/учится в нескольких учебных центрах, т.е. связи многие-ко-многим - это еще как минимум три таблицы (учебные центры + преподаватели + студенты). последние две таблицы могут выступать как связующая для "многие-ко-многим"
4. у человека есть логин - это еще одна отдельная таблица, каждый человек может иметь 1...N логинов для входа в систему. хотя тут как, может быть и один логин, а может надо делать раздельные для преподов и студентов. но даже без этого - я например могу оформить несколько учеток на гугло почте - я же как человек один, а аккаунтов у меня много

итого:

persons
* id
* fio
* gender
* birthday

centers
* id
* name

professors
* id
* person_id
* center_id

students
* id
* person_id
* center_id

accounts
* id
* person_id
* type (1 - professor, 2 - student)
* username
* password

oauth_accounts - хранит связи между локальными аккаунтами и внешними (гугл, вконтакте и так далее)
* id
* account_id
* token
* exp_date

насчет фото - не понятно, если это фото человека - то в persons
насчет администраторов - это права доступа, назначаются в рамках account
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051586
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17-77каждый человек может иметь 1...N логинов для входа в систему

Это только для форумов "на посраться", когда забаненный троль тут же создаёт твинка и
продолжает вкидывать на вентилятор. Серьёзным проектам такое не нужно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051587
Elfix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, нет, сейчас пользователь может заходить любым удобным для себя способом: используя email или facebook, или google, или все одновременно.
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051590
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elfix
Читайте внимательнее тогда, дублирую:
ElfixИдея в том, что есть мастер таблица persons, в которой хранятся и конкретные профессионалы и учебные центры.
Профессионалы могут обучать других профессионалов, а учебные центры могут также заниматься образовательной деятельностью и нанимать на работу людей из таблицы professionals. Для примера есть таблийа photos. Владельцем фото может быть как прлфессионал, так и учебный центр.

Таблица users нужна, чтобы войти в систему.
А таблица users_uids хранит uid для каждого пользователя, чтобы он мог зайти или через соц сеть или через email (проверка происходит на стороне firebase и на клиенте и на сервере).
Это НЕ постановка задачи. Это объяснение, как вы будете решать задачу с помощью вашей схемы. А самой задачи здесь нет.
Вот эта фраза выглядит как кусок постановки задачи:
Elfix
пользователь может заходить любым удобным для себя способом: используя email или facebook, или google, или все одновременно.
Осталось только объяснить, что значит "использовать все способы одновременно". Вот и всю вашу соцсеть опишите в таком стиле.

Dimitry Sibiryakov
Это только для форумов "на посраться", когда забаненный троль тут же создаёт твинка и
продолжает вкидывать на вентилятор. Серьёзным проектам такое не нужно.
+1
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051592
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И? Это как-то отвечает на мой вопрос? Или требует таблицу логинов отдельную от таблицы персон?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051595
Elfix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
17-77, большое спасибо за содержательный и конкретный ответ.
Также большое спасибо за Ваше видение структуры.

Но, немного не так.

Таблица persons - это по сути общая таблица и для professionals и для centers.
По сути ведь, образовательные услуги может оказывать как конкретное физическое лицо, так и целая организация.
У физического лица есть набор специфичных полей в таблице professionals (дата рождения, пол и т. п.), а у организации (centers) есть набор своих полей (дата регистрации, графики работы, руководитель, администратор). При этом организация может включать в себя много физических лиц, выполняющих образовательные услуги, а физическое лицо всегда само по себе.

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

Например, если в будущем пользователь захочет увидеть сквозной список тех кто оказывает образовательные услуги, тогда мы ему покажем записи таблицы persons, а по свойству type мы поймем где взять дополнительную расширенную информацию о том, кто будет обучать конкретно - из таблицы centers или из таблицы professionals.

В таблицах есть поля deleted - это если какой-то профессионал удалился, но для истории хранится в базе - на досках объявлений, в сообщениях, в лайках, отзывах и т. п. Удалять такую информацию по моему мнению наверное не нужно, и это поле в будущем поможет настраивать PARTITIONS, чтобы немного разгрузить базу, если в ней наберется сколько угодно много записей.

Мне интуитивно кажется, что можно обойтись без таблицы users, сразу же используя таблицу professionals и к ней уже привязывать таблицу с возможностями авторизации. Но, смущает то, что тогда в ней окажутся люди, которые являются администраторами-секретарями учебных центров, а профессионалами не являются и никогда не являлись. А значит не должны выводиться в списках людей, предлагающих свои услуги...
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051600
Elfix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, по моей изначальной задумке есть таблица users, в ней есть поле blocked.
Есть таблица users_uids, в которой хранятся uids из базы firebase.

На клиенте firebase авторизует клиента и получает uids и токен, сервер этот токен проверяет и по нему находит uids.
А по uids уже понимает какие поля надо достать из таблицы users, чтобы пользователь узнал себя. Таким образом, я не храню ни логины, ни пароли нигде, доверяю вопрос идентификации стороннему сервису firebase.

Если поставить атрибут blocked в таблице users, то независимо от того каким способом авторизовался пользователь он в любом случае будет заблокирован сервером и зайти ему уже не удастся.
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051601
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElfixА по uids уже понимает какие поля надо достать из таблицы users, чтобы пользователь узнал
себя.

То есть Вася Пупкин может "узнать себя" в Вове Путине, например. Превосходно...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051602
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elfix
По сути ведь, образовательные услуги может оказывать как конкретное физическое лицо, так и целая организация.
То есть вам еще и учет организаций нужен? Простите, но это в корне меняет вообще всё. Дальше без меня давайте, выдавливать из вас новые требования в час по чайной ложке мне не интересно.
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051605
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElfixЯ потратил на эту схему 3 минуты своего времени. Мне правда не жалко её выкинуть и сделать
новую.

В таком случае если уж Вы решили создать клон LinkedIn - начните с изучения оригинала:
http://www.databaseanswers.org/data_models/linked_in/index.htm
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051611
Elfix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
17-77,

немного переделал схему. Получилось вот так.
...
Рейтинг: 0 / 0
Проектирование базы для соц. сети
    #40051616
Elfix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

ElfixЯ потратил на эту схему 3 минуты своего времени. Мне правда не жалко её выкинуть и сделать
новую.

В таком случае если уж Вы решили создать клон LinkedIn - начните с изучения оригинала:
http://www.databaseanswers.org/data_models/linked_in/index.htm
Спасибо, вот это действительно интересная информация. Изучаю.
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование базы для соц. сети
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]