作者xfighter (xfighter)
看板Programming
標題[問題] SQL 資料表設計的效率問題
時間Wed Dec 25 16:34:38 2013
最近在做的東西遇到了一些瓶頸, 想請問大家資料庫的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
1F:推 mars90226:多對多要另外開一個table存兩邊的id 1.171.180.35 12/25 17:21
2F:→ mars90226:student和lesson就不用記對方的id了 1.171.180.35 12/25 17:22
3F:→ mars90226:從新的table找到對方id在去對方的table 1.171.180.35 12/25 17:22
4F:→ mars90226:找就行了,第二個的話你要拿到每個課程 1.171.180.35 12/25 17:22
5F:→ mars90226:的留言自然就是用lesson id去找message 1.171.180.35 12/25 17:23
6F:→ mars90226:看起來很OK 1.171.180.35 12/25 17:23
7F:推 yvb:1.建議做資料庫正規化 2.試試 LIMIT clause 114.43.149.14 12/25 17:35
8F:→ MOONRAKER:1設計要改,2想太多。 118.163.12.174 12/25 19:18
9F:→ MOONRAKER:這樣就怕暴力,自己開檔寫不就好了 118.163.12.174 12/25 19:18
10F:→ MasterChang:才多少人?效率? 118.233.217.48 12/25 23:02
11F:推 plover:student id、course id、elective system 111.241.40.165 12/29 00:05
12F:推 plover:用data type去解釋資料,而不是用自訂的; 111.241.40.165 12/29 00:07
13F:→ plover:之類的分隔線去解釋資料 111.241.40.165 12/29 00:08