1. 程式人生 > >【資料庫】主鍵,外來鍵,主表,從表,關聯表,父表,子表

【資料庫】主鍵,外來鍵,主表,從表,關聯表,父表,子表

轉自:https://www.2cto.com/database/201707/662425.html

一、前言

資料庫設計中,hibernate,iBatis等ORM框架的使用中經常聽說主鍵,外來鍵,主表,從表,關聯表,父表,子表之類的術語,弄懂它們之前的區別與聯絡對於資料庫設計和ORM框架的學習使用是非常有必要的。

二、概述

下面從資料庫設計角度,ORM框架使用(以Hibernate為例),PowerDesigner軟體以及實際業務角度進行一下介紹。

(1) 資料庫角度而言

主鍵:一般情況下,滿足第一正規化的表都有一個主鍵Primary key,用於唯一標示資料庫中的一個欄位。

外來鍵:外來鍵是相對於資料庫設計中的參考完整性而言,它與主鍵之間是彼此依賴的關係。假設現在有兩個表,產品分類表ProductCategory(主鍵CategoryId)和產品資訊表Product(主鍵ProductId),每類產品都屬於一個分類。那麼如果產品資訊表肯定需要參考產品分類表進行定義。因為如果沒有產品分類表,又何談產品分類呢。所以產品資訊表Product需要引用ProductCategory中的主鍵CategoryId 進行產品分類定義,Product表中引用CategoryId的欄位就是外來鍵。

在概念模型(Concept Model)中,從產品分類角度看,產品分類和產品之間就是一對多的關係,一個分類下可以有多個產品。從產品角度看,產品和產品分類之間是多對一的關係,多種產品屬於一個分類。

主表:在資料庫中建立的表格即Table,其中存在主鍵(primary key)用於與其它表相關聯,並且作為在主表中的唯一性標識。(摘自百度百科)

從表:以主表的主鍵(primary key)值為外來鍵 (Foreign Key)的表,可以通過外來鍵與主表進行關聯查詢。從表與主表通過外來鍵進行關聯查詢。(摘自百度百科)

關聯表:兩個資料庫及其(資料)表之間的資料的相互依賴和影響關係。

比如現有某學校三個資料表:學生(學號,姓名),課程(課程名,課程編號),選課(學號,課程號,成績)。選課表中的“學號”,“課程號”必須是另外兩個表中存在的資料,才有意義;而且一旦另外兩表中的某一學生或課程被刪除,選課表中的相應學號或課程號必須自動刪除。這就是一種關聯關係。它實際上是保證資料完整性的一種做法.

父表,子表的說法其實在PowerDesigner中解釋可能更加恰當,這裡就不多說了。

(2)從ORM框架來看

Hibernate的主表從表請參照:

https://www.iteye.com/problems/31280

關聯表: 在Hibernate的關聯關係中,存在著多對多的關聯,但是實際情況下,我們是很少使用多對多關聯的,因為它的查詢效率很低(https://zhidao.baidu.com/question/244432511.html)。

舉個例子,一個訂單可以訂多個產品,一個產品也可以出現在多張訂單。很明顯,一個多對多的關係,因為效率問題,我們必須將它分解成兩個1對多的關係,所以,必須新增一箇中間表,也就是關聯表,用來儲存兩個表的主鍵,從而實現多對多關係的分解。

(3)PowerDesigner

一個截圖,足以說明一切了,多的也不用舉例,上面的單詞相信大家還是可以看懂的。

\

(4)實際業務功能

關於這個業務功能,不多介紹了,從網上截取了一個不錯的例子,大家可以看一下,介紹的非常不錯。

https://www.iteye.com/problems/31280

班級:Class 學生:Student

Class的表結構

id int identity,

name varchar

Student

id int identity,

name varchar,

classId int refrence Class ('id')

Student 中classId引用Class,一個班級中可能有多個學生,那麼此時可以說Class是主表,Student是Class的從表,從hibernate的角度看,Student和Class是一個many-to-one的關係。

不過主表和從表是相對的,沒有絕對的,比如,老師和學生的關係,一個老師有多個學生,一個學生同時也有多個老師,這時如果以老師為主表,那學生就是從表,一學生為主表,那老師就是從表。

如何確定主表和從表?

則完全取決於業務,業務上的主體就是主表,比如軟體A是為老師而設計,用於管理學生的,那老師就是主表,軟體B是為家長設計,用於管理老師的,那學生就是主表。主表和從表沒有絕對,完全取決業務上的重心。

相信看了上面的介紹,大家都這些概念也大致的所有了解了。把這些基本概念弄懂對於學習ORM框架是非常重要的。

主從表是一種資料關係模型,主表約束從表。以學員資訊表stuInfo和考試成績表stuMarks為例, 我們知道它們是一對多的關係,當然一是主,多是從。(譬如我們的胡主席是主,我們大家都要聽主席的話!)所以stuInfo就是主表,stuMarks就是從表。那麼,一般我們會在從表中做一個外來鍵欄位,引用主表中的主鍵。(為什麼呢?大家想想是13億人民記住主席的名字容易還是主席記住13億人民名字呢?)這一點,已經在stuMarks表中得到了體現。那麼,為了保持資料的完整性。主從表我們要儘量遵循以下原則:

1、當主表中沒有對應的記錄時,不能將記錄新增到子表 ——成績表中不能出現在學員資訊表中不存在的學號;

2、不能更改主表中的值而導致子表中的記錄孤立 ——把學員資訊表中的學號改變了,學員成績表中的學號也應當隨之改變;

3、子表存在與主表對應的記錄,不能從主表中刪除該行 ——不能把有成績的學員刪除了;

、刪除主表前,先刪子表 ——先刪學員成績表、後刪除學員資訊表。