@Myshka

Дадите совет по построению БД?

Привет :3

Есть задача - следить за изменением состояния друзей в Вк(записывать кто выбыл, кого добавили).
У меня, на данный момент, вот такие четыре не хитрые таблицы
Как бы вы переделали их, чтоб было, так сказать пА-люЦки, со всякими ключами, связями и т.д.?

:3
8fb58057f75642a19a06d0fa92edc575.png
  • Вопрос задан
  • 121 просмотр
Пригласить эксперта
Ответы на вопрос 3
petermzg
@petermzg
Самый лучший программист
У вас избыточность данных.
id, first_name, last_name,sex,city - почти не будут меняться. Их в одну таблицу friends.
А в других останется только id записи и ссылка personid на friends
Ответ написан
@d-stream
Готовые решения - не подаю, но...
Персона, если не заморачиваться со сменами фамилии, пола и т.п. - по сути одна, а эта персона во времени может приходить, уходить и т.п.

Вот и напрашивается одна табличка с первичным ключом person_id и горой данных типа ФИО и т.п., а вторая слегка упрощенная табличка - этакая история (хронология) событий:
датавремя, персона (person_id), действие (например int или enum)

соответственно если взять первую запись по хронологии для конкретной персоны - увидим когда персона впервые появилась, по действию последней записи персоны - понимаем ее статус

ну и всяческие "сколько в прошлом месяце пришло и сколько ушло" или сколько было френдов 143 дня назад" запросы лепятся в одну строчку... точнее вру, последний получится чуть посложнее
Ответ написан
3vi1_0n3
@3vi1_0n3
Я бы сделал одну табличку такой структуры как ваши, но с одним дополнительным полем Status, в котором можно писать, куда, собственно, человек относится.
Person(PersonId, FirstName, LastName, Sex, Online, City, Status)
Ну, или если нужны исторические данные, то одна табличка, описывающая персону, а вторая - Дата, Статус, UserID. То есть, можно будеть описать сущности так:
Person(PersonId, FirstName, LastName, Sex, Online, City)
PersonId - первичный ключ (автоинкрементируемый)
StatusChange(Id, PersonId, ChangeDate, ChangeValue)
Id - первичный ключ, PersonId - foreign key
Ну и, собственно, всё.
Последний статус находится по максимальному значению Id, которое должно быть автоинкрементальным
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы