|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
Приветствую! Господа профессионалы. Помоги пожалуйста дельным советом, как спроектировать базу данных для социальной сети, где встречаются ученики и учителя в одной профессиональной отрасли. Я сделал несколько связанных между собой табличек, на сколько оптимальна такая структура и как можно было бы её улучшить? Таблица 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". ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2021, 19:20 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
Elfix deleted Elfix deleted Elfix deleted Elfix deleted Elfix Как оптимальнее организовать базу? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2021, 23:56 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
fkthat Elfix Как оптимальнее организовать базу? fkthat, если у Вас больше идей нет, предлагаю Вам далее не участвовать в обсуждении этой темы. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 01:59 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
Elfix, а есть компьютер под руками? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 02:25 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
Alex_Ustinov, что Вы имеете ввиду? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 03:27 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
Elfix, ну что спросил то и имею ввиду - все что написано авторнесколько связанных между собой табличекэто на бумаге или есть реальная База Данных? какая СУБД? CREATE TABLE ... чтобы легче думалось... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 03:38 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
Elfix fkthat пропущено... Выкинуть. fkthat, если у Вас больше идей нет, предлагаю Вам далее не участвовать в обсуждении этой темы. Если же мне позволено остаться, то могу порекомендовать почитать что-нибудь про нормальные формы для начала. Потом опишите словами ту область деятельности, в которой будет использоваться ваша БД. Потом в описании нужно будет выделить основные сущности и их атрибуты. Далее, в первом приближении можно считать, что сущности будут таблицами, а их атрибуты - полями. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 11:07 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
Никанор Кузьмич, почему, же оставайтесь, участвуйте. Но если Вам не сложно высказывайтесь по существу и конкретно. 1. Что конкретно плохого в такой структуре? 2. Что конкретно почитать и что в вашем понимании является нормальными формами? Для удобства восприятия вкладываю схему связей таблиц. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 11:18 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
Elfix что в вашем понимании является нормальными формами? Elfix Что конкретно почитать Elfix Что конкретно плохого в такой структуре? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 12:06 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
Никанор Кузьмич Конкретно плохое - это когда можно ткнуть в какое-то место и сказать: "Вот тут исправить вот так". В вашем случае из 8 присутствующих таблиц 6 нужно слить в одну, и добавить пару-тройку таблиц справочников. Это, по факту, и есть "выкинуть всё и сделать заново". Ткните уже, наконец, в конкретное место и подскажите как исправить. В этом же и заключается мой вопрос... Избыточные, ненормализованные данные, я пока обнаружил в таблицах users и professoonals, и именно поэтому я и задался вопросом, что мне кажется, это можно было бы оптимизировать. Но как, не очень понимаю, ведь пользователем системы может быть любой человек, а вот участником таблицы professionals, не каждый. Я потратил на эту схему 3 минуты своего времени. Мне правда не жалко её выкинуть и сделать новую. Но вы конкретнее можете сказать как она должна выглядеть по-новому? Уверен, что вы потратите на эту задачу времени не больше. В конце концов тема о проектировании базы... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 12:33 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
Elfix Ткните уже, наконец, в конкретное место и подскажите как исправить. Elfix спроектировать базу данных для социальной сети, где встречаются ученики и учителя в одной профессиональной отрасли. Elfix Но вы конкретнее можете сказать как она должна выглядеть по-новому? Уверен, что вы потратите на эту задачу времени не больше. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 13:15 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
Никанор Кузьмич Откуда мне знать, как исправить? Вы же не предъявили никакой внятной постановки задачи. Читайте внимательнее тогда, дублирую: ElfixИдея в том, что есть мастер таблица persons, в которой хранятся и конкретные профессионалы и учебные центры. Профессионалы могут обучать других профессионалов, а учебные центры могут также заниматься образовательной деятельностью и нанимать на работу людей из таблицы professionals. Для примера есть таблийа photos. Владельцем фото может быть как прлфессионал, так и учебный центр. Таблица users нужна, чтобы войти в систему. А таблица users_uids хранит uid для каждого пользователя, чтобы он мог зайти или через соц сеть или через email (проверка происходит на стороне firebase и на клиенте и на сервере). Когда Вы писали Никанор КузьмичВ вашем случае из 8 присутствующих таблиц 6 нужно слить в одну, и добавить пару-тройку таблиц справочников. Что вы имели ввиду? Можно пример? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 13:28 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
ElfixЧто вы имели ввиду? Можно пример? У вас "конкретные профессионалы и учебные центры" не являются пользователями и не могут входить в систему? Тогда откуда будет получаться информация о них? "Пользователь Дядя Вася считает, что его сосед Петя - крутой профессионал и его надо нанимать", так что ли?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 13:40 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 13:42 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
17-77каждый человек может иметь 1...N логинов для входа в систему Это только для форумов "на посраться", когда забаненный троль тут же создаёт твинка и продолжает вкидывать на вентилятор. Серьёзным проектам такое не нужно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 13:46 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, нет, сейчас пользователь может заходить любым удобным для себя способом: используя email или facebook, или google, или все одновременно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 13:51 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
Elfix Читайте внимательнее тогда, дублирую: ElfixИдея в том, что есть мастер таблица persons, в которой хранятся и конкретные профессионалы и учебные центры. Профессионалы могут обучать других профессионалов, а учебные центры могут также заниматься образовательной деятельностью и нанимать на работу людей из таблицы professionals. Для примера есть таблийа photos. Владельцем фото может быть как прлфессионал, так и учебный центр. Таблица users нужна, чтобы войти в систему. А таблица users_uids хранит uid для каждого пользователя, чтобы он мог зайти или через соц сеть или через email (проверка происходит на стороне firebase и на клиенте и на сервере). Вот эта фраза выглядит как кусок постановки задачи: Elfix пользователь может заходить любым удобным для себя способом: используя email или facebook, или google, или все одновременно. Dimitry Sibiryakov Это только для форумов "на посраться", когда забаненный троль тут же создаёт твинка и продолжает вкидывать на вентилятор. Серьёзным проектам такое не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 14:05 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
И? Это как-то отвечает на мой вопрос? Или требует таблицу логинов отдельную от таблицы персон? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 14:06 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
17-77, большое спасибо за содержательный и конкретный ответ. Также большое спасибо за Ваше видение структуры. Но, немного не так. Таблица persons - это по сути общая таблица и для professionals и для centers. По сути ведь, образовательные услуги может оказывать как конкретное физическое лицо, так и целая организация. У физического лица есть набор специфичных полей в таблице professionals (дата рождения, пол и т. п.), а у организации (centers) есть набор своих полей (дата регистрации, графики работы, руководитель, администратор). При этом организация может включать в себя много физических лиц, выполняющих образовательные услуги, а физическое лицо всегда само по себе. От лица профессионала залогиниться можно, а вот от лица учебного центра нет - ведь в учебном центре всегда есть конкретный профессионал, который за ней стоит, а значит этот профессионал может залогиниться как профессионал и далее уже выполнять все необходимые функции по вверенному ему учебному центру. Например, если в будущем пользователь захочет увидеть сквозной список тех кто оказывает образовательные услуги, тогда мы ему покажем записи таблицы persons, а по свойству type мы поймем где взять дополнительную расширенную информацию о том, кто будет обучать конкретно - из таблицы centers или из таблицы professionals. В таблицах есть поля deleted - это если какой-то профессионал удалился, но для истории хранится в базе - на досках объявлений, в сообщениях, в лайках, отзывах и т. п. Удалять такую информацию по моему мнению наверное не нужно, и это поле в будущем поможет настраивать PARTITIONS, чтобы немного разгрузить базу, если в ней наберется сколько угодно много записей. Мне интуитивно кажется, что можно обойтись без таблицы users, сразу же используя таблицу professionals и к ней уже привязывать таблицу с возможностями авторизации. Но, смущает то, что тогда в ней окажутся люди, которые являются администраторами-секретарями учебных центров, а профессионалами не являются и никогда не являлись. А значит не должны выводиться в списках людей, предлагающих свои услуги... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 14:09 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, по моей изначальной задумке есть таблица users, в ней есть поле blocked. Есть таблица users_uids, в которой хранятся uids из базы firebase. На клиенте firebase авторизует клиента и получает uids и токен, сервер этот токен проверяет и по нему находит uids. А по uids уже понимает какие поля надо достать из таблицы users, чтобы пользователь узнал себя. Таким образом, я не храню ни логины, ни пароли нигде, доверяю вопрос идентификации стороннему сервису firebase. Если поставить атрибут blocked в таблице users, то независимо от того каким способом авторизовался пользователь он в любом случае будет заблокирован сервером и зайти ему уже не удастся. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 14:14 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
ElfixА по uids уже понимает какие поля надо достать из таблицы users, чтобы пользователь узнал себя. То есть Вася Пупкин может "узнать себя" в Вове Путине, например. Превосходно... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 14:15 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
Elfix По сути ведь, образовательные услуги может оказывать как конкретное физическое лицо, так и целая организация. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 14:19 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
ElfixЯ потратил на эту схему 3 минуты своего времени. Мне правда не жалко её выкинуть и сделать новую. В таком случае если уж Вы решили создать клон LinkedIn - начните с изучения оригинала: http://www.databaseanswers.org/data_models/linked_in/index.htm Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 14:32 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
17-77, немного переделал схему. Получилось вот так. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 14:41 |
|
Проектирование базы для соц. сети
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov ElfixЯ потратил на эту схему 3 минуты своего времени. Мне правда не жалко её выкинуть и сделать новую. В таком случае если уж Вы решили создать клон LinkedIn - начните с изучения оригинала: http://www.databaseanswers.org/data_models/linked_in/index.htm Спасибо, вот это действительно интересная информация. Изучаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 14:45 |
|
|
start [/forum/topic.php?fid=32&fpage=2&tid=1539809]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 244ms |
total: | 389ms |
0 / 0 |