看板 Programming 關於我們 聯絡資訊
最近在做的東西遇到了一些瓶頸, 想請問大家資料庫的table該怎麼設計會比較有效率: case1: 有n個學生, 有m種課程 學生 課程 1 1(數學) 2 2(國文) 3 . 4 . . . . m . n 應用是要知道每個學生選了哪些課程 table要怎麼設計, 效率會比較好呢? 我目前的做法是: 學生table: -----student----- | ID | name | my_lessons | | 1 | John | 1;3;6 | | 2 | Jack | 4;5;6 | | . | . | . | | . | . | . | | n | . | . | 課程table: ----lession------ | lesson_ID | lesson_name | | 1 | 國文 | | 2 | 數學 | | . | . | | . | . | | m | . | 要拿到每個學生在上的課程, SQL語法: $list = student's my_lessons $result = mysql_query("SELECT * FROM `lesson` WHERE `lesson_ID` IN ($list)"); 這種多對多的table一但資料庫太大, 效率就會很差... 不知道版上大大們可否給小的一些建議 case2. 每一堂課的留言版要怎麼設計會比較有效率呢 課程table: ----lession------ | lesson_ID | lesson_name | | 1 | 10/25 國文 | | 2 | 10/27 數學 | | . | 10/30 國文 | | . | . | | . | . | 留言內容table: ----message------ | message_ID | lesson_ID | message | | 1 | 1 | 今天國文好難 | | 2 | 1 | 國文真是我的罩門 | | 3 | 2 | 我喜歡數學 | | . | . | . | | . | . | . | 要拿到每堂課程的留言, SQL語法: $lession_ID = lession's lesson_ID mysql_query("SELECT * FROM `message` WHERE `lesson_ID` = '$lession_ID'"); 然後每堂課都要執行一次..去撈所有的message table 這樣會不會太暴力? 謝謝..^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.65.104
mars90226:多對多要另外開一個table存兩邊的id 1.171.180.35 12/25 17:21
mars90226:student和lesson就不用記對方的id了 1.171.180.35 12/25 17:22
mars90226:從新的table找到對方id在去對方的table 1.171.180.35 12/25 17:22
mars90226:找就行了,第二個的話你要拿到每個課程 1.171.180.35 12/25 17:22
mars90226:的留言自然就是用lesson id去找message 1.171.180.35 12/25 17:23
mars90226:看起來很OK 1.171.180.35 12/25 17:23
yvb:1.建議做資料庫正規化 2.試試 LIMIT clause 114.43.149.14 12/25 17:35
MOONRAKER:1設計要改,2想太多。 118.163.12.174 12/25 19:18
MOONRAKER:這樣就怕暴力,自己開檔寫不就好了 118.163.12.174 12/25 19:18
MasterChang:才多少人?效率? 118.233.217.48 12/25 23:02
plover:student id、course id、elective system 111.241.40.165 12/29 00:05
plover:用data type去解釋資料,而不是用自訂的; 111.241.40.165 12/29 00:07
plover:之類的分隔線去解釋資料 111.241.40.165 12/29 00:08