作者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