[問題] SQL 資料表設計的效率問題

看板Programming作者 (xfighter)時間11年前 (2013/12/25 16:34), 編輯推噓4(409)
留言13則, 5人參與, 最新討論串1/1
最近在做的東西遇到了一些瓶頸, 想請問大家資料庫的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

12/25 17:21, , 1F
多對多要另外開一個table存兩邊的id
12/25 17:21, 1F

12/25 17:22, , 2F
student和lesson就不用記對方的id了
12/25 17:22, 2F

12/25 17:22, , 3F
從新的table找到對方id在去對方的table
12/25 17:22, 3F

12/25 17:22, , 4F
找就行了,第二個的話你要拿到每個課程
12/25 17:22, 4F

12/25 17:23, , 5F
的留言自然就是用lesson id去找message
12/25 17:23, 5F

12/25 17:23, , 6F
看起來很OK
12/25 17:23, 6F

12/25 17:35, , 7F
1.建議做資料庫正規化 2.試試 LIMIT clause
12/25 17:35, 7F

12/25 19:18, , 8F
1設計要改,2想太多。
12/25 19:18, 8F

12/25 19:18, , 9F
這樣就怕暴力,自己開檔寫不就好了
12/25 19:18, 9F

12/25 23:02, , 10F
才多少人?效率?
12/25 23:02, 10F

12/29 00:05, , 11F
student id、course id、elective system
12/29 00:05, 11F

12/29 00:07, , 12F
用data type去解釋資料,而不是用自訂的;
12/29 00:07, 12F

12/29 00:08, , 13F
之類的分隔線去解釋資料
12/29 00:08, 13F
文章代碼(AID): #1IkfYXpz (Programming)
文章代碼(AID): #1IkfYXpz (Programming)