在我的前一篇博客中學習了一點點數據庫的基礎知識,今天我們一起學習數據庫中的多對多的數據庫的設計。在我們的日常生活中有哪些是多對多的數據關係呢?如果你還是一個學生,可能最容易想到的就是老師和學生的關係。一個老師肯定給多個學生上過課,同時一個學生也聽過很多老師的課。如果你是一名銷售,可能最容易想到的就是訂單和客戶的關係。總之,生活中多對多的關係實在是太多了。
實例:
下面我們就以老師和學生的關係來理解數據庫中的多對多的關係;
假設:老師的信息有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類的對應關係。最後再一下一對一的數據庫,就像我們的身份證與人的關係在正常情況下就是一個人只有一個身份證。一張身份證也只對應一個人,如果真要設計一對一的關係表嗎?我也不知道具體的應用場景。我想的話我是不是可以只設計一張表呢?畢竟據我瞭解。單表查詢的速率還是會快很多的呢?雖然我也沒有用過。前段時間聽我們公司的一同事說,我們公司的產品在升級的過程中,由於數據庫的東西太多,導致數據庫在升級的時候耗時過長,後來經過數據庫的專家對數據庫的優化,大大縮短了升級時間。所以我們在以後的數據庫的設計的過程中也應該考慮到數據庫的效率的問題。希望大神多多指教。