表映射關係(一對一,一對多,多對多)

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方法
}

。。。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章