1、一對一
一對一關係推薦使用唯一外鍵關聯,即兩張表使用唯一外鍵關聯,且給外鍵添加唯一約束(unique),保證外鍵唯一。
例如一個人對應一個卡號.
表設計語句:
CREATE TABLE tb_card(
ID INT PRIMARY KEY AUTO_INCREMENT,
CODE VARCHAR(18)
);
...
CREATE TABLE tb_person(
ID INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(18),
SEX VARCHAR(18),
AGE INT,
CRAD_ID INT UNIQUE,
FOREIGN KEY (CARD_ID) REFERENCES tb_card (ID)
);
...
Java的POJO設計
// Person類
public class Person {
private int id;
private String name;
private String sex;
private int age;
// 一個人對應一個Card
private Card card;
// 省略getter和setter方法...
}
// Card類
public class Card {
private int id;
private String code;
// 省略getter和setter方法...
}
2、一對多
一對多關係通常使用主外鍵關聯,外鍵列應該在多方,即多方維護關係。
例如一個班級可以有多個學生,一個學生只屬於一個班級,班級對學生是一對多,學生對班級爲多對一。
表設計語句:
CREATE TABLE tb_clazz(
ID INT PRIMARY KEY AUTO_INCREMENT,
CODE VARCHAR(18),
NAME VARCHAR(18)
);
...
CREATE TABLE tb_student(
ID INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(18),
SEX VARCHAR(18),
AGE INT,
CLAZZ_ID INT,
FOREIGN KEY (CLAZZ_ID) REFERENCES tb_clazz (ID)
);
...
POJO設計:
public class Clazz { private Integer id; private String code; private String name; // 一個班級多個學生 private List<Student> students; // 省略getter和setter方法 }
public class Student { private Integer id; private String name; private String sex; private Integer age; // 一個學生對應一個班級 private Clazz clazz; // 省略getter和setter方法 }
3、多對多
使用中間表維護關係,提高性能。
例如用戶和訂單,一個用戶可以有多個訂單,一個訂單中可以有多種商品,一種商品也可以屬於多個不同的訂單,訂單和商品就是多對多的關係。
表設計語句:
CREATE TABLE tb_user( ID INT PRIMARY KEY AUTO_INCREMENT, USERNAME VARCAHR(18), LOGINNAME VARCHAR(18), PASSWORD VARCHAR(18), PHONE VARCHAR(18) ); ... CREATE TABLE tb_article( ID INT PRIMARY KEY AUTO_INCREMENT, NAME VARCAHR(18), PRICE DOUBLE, REMARK VARCHAR(18) ); ... CREATE TABLE tb_order( ID INT PRIMARY KEY AUTO_INCREMENT, CODE VARCAHR(18), TOTAL DOUBLE, USER_ID INT, FOREIGN KEY (USER_ID) REFERENCES tb_user (ID) ); ... CREATE TABLE tb_item( ORDER_ID INT, ARTICLE_ID INT, AMOUNT INT, PRIMARY KEY(ORDER_ID,ARTICLE_ID), FOREIGN KEY (ORDER_ID) REFERENCES tb_order (ID), FOREIGN KEY (ARTICLE_ID) REFERENCES tb_article (ID) ); ...
POJO類:
//User類
public class User {
private int id;
private String userName;
private String loginName;
private String password;
private String phone;
private String address;
// 用戶和訂單爲一對多,即一個用戶可以有多個訂單
private List<Order> orders;
// 省略setter和getter方法
}
//Order類
public class Order {
private Integer id;
private String code;
private Double total;
// 訂單和用戶爲多對一,即一個訂單只能有一個用戶
private User user;
// 訂單和商品爲多對多,即一個訂單可以有多個商品
private List<Article> articles;
// 省略getter和setter方法
}
//Article類
public class Article {
private Integer id;
private String name;
private Double price;
private String remark;
// 商品和訂單爲多對多,即一個商品可以有多個訂單.
private List<Order> orders;
// 省略setter和getter方法
}
。。。