2013-08-20 73 views
0

我想創建一個在MySQL中的類的時間表。列是一週的日子,行是時間間隔(即7:00 - 8:00)。我也試圖有30分鐘的時間間隔,當某個特定主題是2小時時,它將跨越4行。每個單元格包含課程和房間的名稱。這是我試圖發展的一個小程序的一部分。到目前爲止,我知道要插入哪些數據,但我堅持創建正確的數據庫模式。真的需要關於如何讓這個開始的邏輯(即我應該使用哪些數據類型)。謝謝!這個數據庫模式和邏輯

+2

數據庫表不是電子表格。星期一7:00-8:00之間可存儲的內容與星期五7:00-8:00存儲的內容之間沒有任何區別。兩個項目都應該存儲在同一列中。這將指向一列存儲日期和另一存儲時間跨度,並且最後一列存儲「在該時間段內當天發生的事情」。 –

+0

@Damien_The_Unbeliever我已經完成了用上面提到的那個數據庫設計插入所有的數據。然後我試圖用HTML顯示時間表格式的數據。 – JKTA

回答

1

請問這個聲音:

CREATE TABLE TimeTable (
    ID int(8) NOT NULL AUTO_INCREMENT, 
    Subject varchar(32) NOT NULL, 
    Room varchar(8) NOT NULL, 
    StartTime datetime NOT NULL, 
    EndTime datetime NOT NULL, 
    Day enum('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday') NOT NULL, 
    PRIMARY KEY (ID) 
); 

你只存儲有關數據這個科目。

您提到的其他內容實際上取決於您用來輸出數據的任何語言。你不能真的把時間間隔放在數據庫中間。正如Damien_The_Unbeliever所說,數據庫並不完全是電子表格。

希望這是有道理的。

+2

你可以有一個複合主鍵而不是'ID'字段:'(StartTime,Day)'。 –

+0

是的,你說得對。我試圖用HTML輸出時間表,我認爲它足夠靈活來處理這種表格。謝謝! – JKTA

+0

@Cobra_Fast很好的+1,但作爲一個側面說明這個PRIMARY KEY是每個記錄12或13個字節大。如果您使用存儲引擎InnoDB,它會將固定索引(本例中爲PRIMARY KEY)數據添加到每個二級索引。這也是爲什麼InnoDB查找二級索引和MyISAM更快的原因,但它需要更多的磁盤空間和更大的緩衝池。 –

0

您可以爲一天設置一列(您可以設置從1到7的天數),一列用於開始時間,一列用於結束時間。這樣你的查詢將變得更加簡單。

例子:

Day | Start | Finish 
----------------------------- 
1  8:30   12:00 
1  13:00  15:00 

這也會派上用場,當你不想堅持了30分鐘。

0

列是星期幾,並且各行時間間隔(即7:00 - 8:00)

這是一個糟糕的開局。您的專欄應該是單個課程的屬性,並且您的行應該在整個星期內成爲所有不同的課程。

你列可能是Day of WeekLesson of DayDurationSubjectRoomTeacher,等等。在這個例子中,你的主鍵是(Day of Week, Lesson of Day)

這樣,如果您想要某個特定日子的日程安排,您只需選擇一切與Day of Week = 2以獲得週二的日程安排。

每個單元格包含課程和房間的名稱。

這也違反了規範化的規律。每個「單元格」應始終具有不超過一個值。

真的需要如何得到這個開始(即我應該用什麼數據類型)

用最直觀的類型的邏輯。當存儲了一些選擇integer,當存儲幾個字符選擇varchar(n),使用大量文字時使用text等等...

+0

感謝您的想法。 '我的意思是'列是一週的日子......'是可以使用HTML完成的顯示。這不一定是MySQL表格的格式。對不起,如果問題很混亂。 – JKTA

0

我會以這種方式創建它,並在此處進行規範化處理,併爲進一步擴展此應用程序提供更多機會。 表(屬性):

  1. timeslots(id, start_time, end_time)
  2. subjects(id, name)
  3. timetable(timeslot_id, subject_id)
+0

鏈接表是不必要的。時間段中沒有足夠的變化來證明這些使用的合理性。 – ninty9notout

+1

但是,在這種使用情況下,可能沒有必要使用更復雜的用例,但1表數據庫(電子表格樣式)可能不夠用。這只是爲了迎合未來的擴張,它現在可能不是最好的。 – Jianhong