mysql建方面的多对多的实例原理该怎么理解

mysql建方面的多对多的实例原理该如何理解?

我在实际运用中,一对多是这样建的。

学生表:

学生id 学生姓名

1 张三

2 李四

考试表

自增ID 学生id 学科

1 1 语文

2 1 数学

3 2 语文

4 2 英语 

‘考试表’存储了‘学生表’的多条记录。我这样建立合理不合理呢?这样建合,我后面会产生二个问题,感觉不是很方便,大家有什么好的方式可以解决后面的这二个问题呢?

这二个表中的数据可能是上百万哦!

问题1:

在查询‘考试表’中考了语文和数学的学生姓名列出来。

我与的SQL是可以查询出来,不过效率不行,感觉这样建表是不是就是引起的这个查询问题呢?

问题2:

我这样建立一对多的方式是不是有问题?大家建立一对多是加了‘关系映射表’ 吗?有什么好处呢?



1 你的是什么语句 怎么知道效率不行

2 你的表没什么大问题,无非就是多加个学科表 考试表里的学科用学科表的id代替




看你有什么需求了,你的1对多也没什么问题

但是如果数据很多的情况下,还是有数据冗余的。

比如有1万学生考了语文,那么你的

考试表

自增ID 学生id 学科

1 1 语文

2 2 语文

3,3 语文

。。。。。

还有比如每个学生考了20科,一共有1万学生

对每个学生而言

 考试表

自增ID 学生id 学科

1 1 语文

2 1 数学

3,1 英语

……..

直到1万学生完

你可以用另外一种方案

学生表:

学生id(主键) 学生姓名

1 张三

2 李四

考试表

考试id(主键) 学科

1 语文

2 数学

3 英语

这连个表中的数据不会有冗余,然后建立一个多对多的关系

学生id 和考试id 作为联合主键和外键,这样数据冗余会小很多。

SQL code


问题一的伪代码
select sname from student where sid in( select sid from multi-to-multi jion exam where ename=“语文” or ename="数学");


引用‘考试表’存储了‘学生表’的多条记录。我这样建立合理不合理呢?这样建合,我后面会产生二个问题,感觉不是很方便,大家有什么好的方式可以解决后面的这二个问题呢?
这二个表中的数据可能是上百万哦!


引用问题1:
在查询‘考试表’中考了语文和数学的学生姓名列出来。
我与的SQL是可以查询出来,不过效率不行,感觉这样建表是不是就是引起的这个查询问题呢?

引用问题2:
我这样建立一对多的方式是不是有问题?大家建立一对多是加了‘关系映射表’ 吗?有什么好处呢?
mysql建方面的多对多的实例原理该怎么理解

相关文章:

你感兴趣的文章:

标签云: