教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Java培訓之數據庫概念模型設計

更新時間:2016年06月24日16時22分 來源:傳智播客java培訓學院 瀏覽次數:

1.概念模型

概念模型是對真實世界中問題域內的事物的描述,不是對軟件設計的描述。當我們要完成一個軟件系統(tǒng)時,需要把系統(tǒng)中的實體抽取出來,形成概念模型。例如部門、員工都是系統(tǒng)中的實體。概念模型中的實體最終會成為Java中的類、數據庫中的表。今天我們需要了解的概念模型包括以下兩個:
  • 對象模型:針對java中的實體類,例如我們之前學習的domain層中的User類等;
  • 關系模型:對應數據庫中的表。
在java中有以下三個關系描述:
  • is a:例如貓是動物,表示繼承關系;
  • has a:例如人有兩只手,表示的是類與成員的關系;
  • use a:表示類與方法之間的關系;
我們今天主要關注的是第二個關系:類與成員的關系。這種關聯關系可以分為如下三種:
  • 一對一關聯:例如老公和老婆就是一對一的關系,一個老公只能有一個老婆,而一個老婆只能有一個老公;
  • 一對多關聯:例如每個員工都從屬一個部門,而一個部門可以有多個員工,其中員工是多方,而部門是一方,從部門角度來說就是一對多,而從員工角度來說就是多對一;
  • 多對多關聯:老師與學生的關系就是多對多,一個老師可以有多個學生,一個學生可以有多個老師。
概念模型在java中對應這實體類,在實體類中使用成員變量完成關聯關系,而且一般都是雙向關聯,以下是java中實體類與成員之間的關聯關系,如下所示:
  • 一對多:部門與員工之間是一對多的關系
class Employee {//多方關聯一方
    ...
    private Department department;//在員工類中關聯部門類
 }
 class Department {//一方關聯多方
    ...
    private List<Employee> employees; //在部門類中關聯員工類
 }
  • 一對一:丈夫與妻子之間是一對一的關系
class Husband {//一方關聯一方
     ...
     private Wife wife; //在丈夫類中關聯妻子類
  }
  class Wife {//一方關聯一方
     ...
     private Husband husband; //在妻子類中關聯丈夫類
  }
  • 多對多:學生與老師之間是多對多關系
  class Student {//多方關聯多方
     ...
     private List<Teacher> teachers; //在學生類中關聯教師類
  }
  class Teacher {//多方關聯多方
     ...
     private List<Student> students; //在教師類中關聯學生類
  }
由以上的關系可以看出,關聯一方時成員就是一方對象,而關聯多方時成員就是多方對象的集合。

2.外鍵約束

概念模型在數據庫中就對應數據表,那么表與表之間的關系也包括:一對一,一對多,多對多。而表與表之間關系是通過外鍵來維護的。
一個表的外鍵是另一個表或它本身的主鍵,如圖1-1所示:

圖1-1 emp表
在emp表中有兩個外鍵,分別是mgr、deptno,其中mgr代表的是員工的上級編碼,它引用的是emp表的主鍵empno,因為員工的上級也是員工,所以上級的編號一定是emp表的主鍵;而deptno是dept表即部門表的主鍵,由圖1-1可以發(fā)現,emp表中deptno列的值有重復的,表明部門是一方,員工是多方。
外鍵約束特性如下:
  • 外鍵必須是另一表或自身表的主鍵的值;
  • 外鍵可以重復;
  • 外鍵可以為空;
  • 一張表中可以有多個外鍵。
我們來查看一下部門表,如圖1-2所示:

圖1-2 dept表
圖1-2中,部門表的主鍵值包括:10、20、30、40,emp表中的deptno列的值引用了dept表的deptno列的值,而圖1-1中,emp表的最后一條記錄,名為張三的部門編號是50,這顯然不符合外鍵約束的要求,因為在emp表中沒有設置外鍵約束因此才沒有報錯。后面我們會學習如何設置外鍵約束。
外鍵值可以重復,對于emp表來說,一個部門中有多個員工,那么emp表中一定有多個員工的deptno列的值是相同的。
外鍵值可以為null,emp表中的一條記錄還沒有與dept表建立關聯時,該條記錄的外鍵值可以為null。
由以上可以發(fā)現,在對象模型中,兩個實體的關聯是通過在各個實體中引用關聯實體對象體現的,而在數據庫表中表與表的關聯是通過一個字段關聯的。
如果表之間建立了關聯關系,會有如圖1-3所示的效果:

圖1-3 表與表的關系
圖1-3中,book表中的cid是外鍵,引用自category表中的cid主鍵;orderitem表中的bid是外鍵,引用自book表的主鍵bid,oid也是外鍵,引用的是orders表中的oid主鍵;orders表中的uid是外鍵,引用自user表中的主鍵uid。這些表與表之間的關系,就可以通過上圖很清楚的體現出來。

本文版權歸傳智播客Java培訓學院所有,歡迎轉載,轉載請注明作者出處。謝謝!
作者:傳智播客Java培訓學院
首發(fā):http://xamj520.com/javaee
0 分享到:
和我們在線交談!