Дизайн базы данных - как я могу иметь повторяющуюся запись базы данных? - PullRequest
1 голос
/ 08 марта 2012

В настоящее время я использую модуль FullCalendar JQuery, чтобы позволить пользователю создавать персональное расписание. События добавляются / обновляются в базе данных SQL Server. Это работает нормально.

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

Затем я хочу, чтобы пользователи могли организовывать встречи с другими пользователями на основе временных интервалов, доступных в их расписаниях.

Я не уверен, как интегрировать эти повторяющиеся события в мою систему или как мой алгоритм будет работать с этими повторяющимися событиями.

Дизайн, который у меня есть на данный момент:

CREATE TABLE Users (
  user_id INT NOT NULL AUTO_INCREMENT,
  email VARCHAR(80) NOT NULL,
  password CHAR(41) NOT NULL,
  PRIMARY KEY (user_id)
);

CREATE TABLE Events (
    event_id INT NOT NULL AUTO_INCREMENT,
    title VARCHAR(80) NOT NULL,
    description VARCHAR(200),
    start_time DATETIME,
    end_time DATETIME,
    group_id INT NOT NULL,
        recurring boolean
);

CREATE TABLE Groups (
    group_id INT NOT NULL,
    user_id INT NOT NULL
);

Будет ли этого достаточно? Как у меня получится, чтобы повторяющиеся события отображались в календаре на каждую неделю? Если мне не хватает какой-либо детали, пожалуйста, спросите! Большое спасибо.

1 Ответ

2 голосов
/ 08 марта 2012

Вы можете использовать что-то вроде следующего:

SELECT  *
FROM    Events
WHERE   Recurring = 0
UNION
SELECT  Event_ID,
        Title,
        Description, 
        DATEADD(WEEK, Interval, Start_Time) [Start_Time],
        DATEADD(WEEK, Interval, End_Time) [End_Time],
        Group_ID,
        Recurring
FROM    Events, 
        (   SELECT  ROW_NUMBER() OVER(ORDER BY Object_ID) [Interval]
            FROM    SYS.ALL_OBJECTS
        ) i
WHERE   Recurring = 1
AND     Interval <= 52 -- reccurs for 1 year

Это заставит все события повторяться в течение 52 недель (или любого другого периода, который вы хотите).

Кроме того, в вопросе вы упомянули sql server и отметили вопрос как SQL server, но весь ваш синтаксис выглядит как MySQL (AUTO_INCREMENT, логический тип данных).

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