2012-03-07 187 views
1

我目前使用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 
); 

這會不會是足夠了嗎?我將如何獲得它,以便每週在日曆上呈現週期性事件?如果我缺乏細節,請詢問!非常感謝你。

+0

您是如何確定重複開始和結束日期的? start_time和end_time列? – 2012-03-07 22:13:34

+0

是的,事件表的start_time和end_time。當用戶創建一個事件時,這些時間被插入到表中。 – 2012-03-07 22:20:29

+0

我會建議閱讀iCal或.ics規範(例如http://en.wikipedia.org/wiki/ICalendar),這將是一個開始掌握概念和問題的好地方。 – RET 2012-03-07 22:35:16

回答

2

您可以使用類似以下內容:

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,Boolean數據類型)。

+0

哇,非常感謝你的回答!是的,我使用SQL語法編寫它,因爲這是我最熟悉的,並且不想搞亂它!這很好,我可以問你在這種情況下Interval是如何填充的嗎? – 2012-03-07 22:47:23

+1

它只是通過計算sys.all_objects中的行數創建的數字列表,該列表是sql_server中的一個系統視圖,其中包含(不奇怪)所有對象(表,鍵,索引,視圖,過程等)。即使在一個空的數據庫中,這個視圖仍然會包含超過一千行,這應該足夠滿足您的需求。欲瞭解更多信息,請參閱[行號](http://msdn.microsoft.com/en-us/library/ms186734.aspx)或[所有對象](http://msdn.microsoft.com/en-us/library /ms178618.aspx) – GarethD 2012-03-07 23:01:37

+0

我明白了,非常感謝你的解釋。因此,在DATEADD(WEEK,Interval,Start_Time)[Start_Time]行中,我可以問一下到底發生了什麼? – 2012-03-07 23:56:06