2

У меня есть проект, в котором у пользователей есть персональный календарь. В календаре пользователь может создавать чаты, писать заметки, сохранять файлы и т. Д. Это похоже на календарь Google. Таким образом, у нас есть две таблицы «Пользователи и календарь» (это таблицы дат и таблицы ссылок для другого объекта (заметки, файлы и т. Д.)). Структуры DB выглядят как db strucutresКак создать структуру базы данных, такую ​​как календарь Google

Но здесь у нас есть некоторые проблемы. Для одного пользователя мы генерируем 365 строк в календаре (или 366 в високосный год), поэтому, если у нас есть 100 пользователей, мы должны генерировать 36500 строк в год. Я думаю, что это не очень хороший способ. Можете ли вы рекомендовать мне хороший способ решить эту проблему?

+0

В одной таблице хранить дату и/или действие. Отдельно храните пользователя, связанного с этой активностью. Если вам нравится, вы также можете иметь таблицу календаря со всеми практическими датами, но для этого нет необходимости, так как ее можно так же легко управлять на уровне приложения. – Strawberry

+0

Спасибо за ур ответить @Strawberry. Но я не понимаю, ясно. Я имею в виду, что мне нужна таблица, в которой я сохранил информацию о дате, типе активности и идентификаторе активности? Таким образом, эта таблица имеет ссылку на пользователя и ссылается на многие другие таблицы (сущности). В таблицах есть столбцы (id user_id entity_type entity_id), где entity_type - где мы должны получать информацию (примечания, файлы и т. Д.) Entity_id - id в этой таблице – handless

+0

Как правило, у вас может быть таблица событий (что происходит когда) и таблица посещаемость (кто участвует в этом): 'events (event_id *, event_title, event_datetime)', 'attendance (event_id *, user_id *)' - \ * = (компонент) PRIMARY KEY – Strawberry

ответ

1

Вы не хотите хранить строку для каждого дня в году. Это избыточно, если у пользователя нет события в этот день, и он не работает, если в тот день у них более одного события.

hasMany пользователь (или один) календари

календарного hasMany событий

Событие начинается в DateTime и заканчивается в DateTime

(или начинается с даты и заканчивается в дату и является событием allDay)

Вы, вероятно, обнаружите, что в какой-то момент вам потребуются повторяющиеся события, и в этом случае ситуация быстро усложняется. Для этого используйте RFC 5545 RRules и ExRules и создайте «виртуальные» события, используя материализованное представление.

Смежные вопросы