首页 > 代码库 > MySql 学习三(多对多)
MySql 学习三(多对多)
在我的前一篇博客中学习了一点点数据库的基础知识,今天我们一起学习数据库中的多对多的数据库的设计。在我们的日常生活中有哪些是多对多的数据关系呢?如果你还是一个学生,可能最容易想到的就是老师和学生的关系。一个老师肯定给多个学生上过课,同时一个学生也听过很多老师的课。如果你是一名销售,可能最容易想到的就是订单和客户的关系。总之,生活中多对多的关系实在是太多了。
实例:
下面我们就以老师和学生的关系来理解数据库中的多对多的关系;
假设:老师的信息有id,name,salary,学生的信息有 id,name,grade (如下图所示:)
在上图中就可以看到老师的信息表格和学生的信息表;所以我们就想到创建老师和学生的两张表格
首先创建老师的信息的表格:
create table TEACHERS(
ID int primary key,
NMAE varchar(100),
SALARY float(10,2)
);
然后创建学生的信息的表格:
create table STUDENTS(
ID int primary key,
NAME varchar(100),
GRADE varchar(1)
);
最后创建老师和学生的关系的表格:
create table TEACHERS_STUDENTS(
T_ID int,
S_ID int,
primary key(T_ID,S_ID),
constraint T_ID_FK foreign key(T_ID) references TEACHERS(ID),
constraint S_ID_FK foreign key(S_ID) references STUDENTS(ID)
);
注意:以上mysql语句可以直接执行的,如果你跟我一样是个小白的,可能这个提示对你用;
在创建表之前。你应该创建数据库,然后用数据库,再创建表
所以你应该首先登陆数据库:mysql -uroot -p();
然后创建database :create database Test;
再用database: use Test;
最后创建表。
我们的表就创建好了,作为一个java开发人员,将数据库中的表已经确定了,我们是不是应该设计我们的java类了呢?
下面我们就开始设计我们的java类:
首先我们设计我们的Teacher类:Teacher类中首先肯定包括Teacher的基本信息,但是与学生的关系如何提现呢?如果你不清楚,就请看下面额:
public class Teacher{
private Integer id;
private String name;
private Float salary;
private List<Student> stus = new ArrayList<Student>();
....
}
Student类如何设计呢?当然与老师的类一样啦!首先得有学生的基本信息,然后就是与老师的关系的体现:所以我们就可以设计如下:
public class Student{
private Integer id;
private String name;
private Character grade;
private List<Teacher> ts = new ArrayList<Teacher>();
...
}
这就是一个简单的多对多的数据库的设计以及java类的对应关系。最后再一下一对一的数据库,就像我们的身份证与人的关系在正常情况下就是一个人只有一个身份证。一张身份证也只对应一个人,如果真要设计一对一的关系表吗?我也不知道具体的应用场景。我想的话我是不是可以只设计一张表呢?毕竟据我了解。单表查询的速率还是会快很多的呢?虽然我也没有用过。前段时间听我们公司的一同事说,我们公司的产品在升级的过程中,由于数据库的东西太多,导致数据库在升级的时候耗时过长,后来经过数据库的专家对数据库的优化,大大缩短了升级时间。所以我们在以后的数据库的设计的过程中也应该考虑到数据库的效率的问题。希望大神多多指教。
本文出自 “学习笔记” 博客,请务必保留此出处http://7298246.blog.51cto.com/7288246/1868746
MySql 学习三(多对多)