MySQL什么是关系_MySQL教程-关系模型
MySQL教程-關系模型
Date 2021-1-22
Author Haihan Gao
什么是關系模型關系模型本質上就是多個存儲數據的二維表
表的每一行稱為記錄
記錄是一個邏輯意義上的數據
表的每一列稱為字段。同一個表每一行記錄擁有若干相同字段
字段定義數據類型:INT,BIGINT,DOUBLE
是否允許為NULL:字段數據不存在,0或空串
不允許為NULL可以簡化查詢條件,加快查詢速度
關系數據庫的表之間需要建立一對多,多對一,多對多的關系
關系數據庫中,關系通過主鍵和外鍵維護
RDBMS(關系數據庫管理系統)的特點數據以表格形式出現
每行為各種記錄名稱
每列為記錄名稱所對應的數據域
許多行和列形成一張表單
若干表單組成Database
RDBMS術語數據庫:關聯表的集合
數據表:數據形成的矩陣
列:每一列的數據類型相同
行:一個多元組,其中每一維的數據類型可能相同,可能不同
冗余:存儲一個數據的副本,降低性能但是提升安全性
主鍵一張表中每一行數據稱為一個記錄,每個記錄由多個字段組成
關系表中的約束:一張表中不能有兩條重復的記錄
不能重復指的是可以通過某個字段唯一區分出不同的記錄
這個字段稱之為主鍵
對主鍵的要求:記錄一旦插入表中,主鍵最好不再被修改
選取主鍵的基本原則:不使用任何業務相關的字段作為主鍵
業務無關的字段,稱之為id
常見的id類型自增整數
全局唯一的GUID,全局唯一的字符串
使用INT自增作為ID,可能導致溢出的問題
聯合主鍵
兩個或多個字段被設置為主鍵
允許一列重復,只要可以通過多個主鍵唯一確定記錄即可
使得復雜度上升,不建議使用
外鍵
一對多表-表之間記錄建立關系
兩個表的關系是一對多的,表示表A的一個記錄對應表B的多個記錄
找到表B中的某個記錄對應的表A中的記錄,只需要在表B的記錄中加上一列,表示這個記錄對應的表A中記錄的主鍵id,有點抽象,可以看這個例子外鍵
實際上,外鍵不是通過列名實現的,而是通過外鍵約束實現的
ALTER TABLE students
ADD CONSTRAINT fk_class_id
FOREIGN KEY (class_id)
REFERENCES classes (id);
做幾點說明第二行指定外鍵約束的名稱
第三行指定class_id作為外鍵
第四行將外鍵關聯到classes表的id列
外鍵約束還能保證不插入無效的數據,插入的數據需要檢查外鍵是否有效
外鍵約束的缺點:降低數據庫的性能,將class_id視為一個普通的列,應用程序自身檢查邏輯的正確性
刪除外鍵約束,通過ALTER TABLE實現
ALTER TABLE students
DROP FOREIGN KEY fk_class_id;
多對多通過兩個一對多關系實現的
引入中間表,關聯兩個一對多關系
一對一一個表中的記錄對應另一個表中的唯一記錄
student對應contact,在contact表中添加唯一一列student_id
合并兩個表?student沒有contact
一對一關系存在的另一個原因是存在熱數據的問題,一個記錄中,某個字段被經常用到,另一些字段用到的概率較小,這樣拆分成兩個表可以提升查詢的效率
比如一個存儲用戶信息的表user,我們將其拆分成user_info和user_profiles,前者被用到的概率大,這樣我們就只用查前面的表就能獲得所需信息
索引
對于關系數據庫,含有許多條記錄,我們為了快速找到某條記錄,可以使用索引。
對于一個student表,有如下列id,主鍵
class_id班級表外鍵
name
GPA
如果我們要按照GPA列進行查詢,可以對GPA列創建索引
ALTER TABLE students
ADD INDEX idx_GPA(GPA);
說明:第二條語句創建了一個名稱為idx_GPA,使用GPA列的索引,索引名稱是任意的,如果索引有多列,可以在括號中依次寫上
ALTER TABLE students
ADD INDEX idx_name_score (name, score);
索引其實是通過一個散列表實現的,只要這個索引的散列性越好,通過這個索引查找記錄的效率就越高
對于主鍵,自動創建主鍵索引,主鍵索引保證唯一
索引可以提升查找效率,但是更新刪除記錄時會導致修改索引,影響更新效率
唯一索引
設計關系數據表的時候,我們往往會遇到一些看上去不會重復的列,比如身份證號,郵箱地址。之前說過這些列不適合作為主鍵,但是我們可以為這些列添加唯一索引。
添加唯一索引的樣例如下
ALTER TABLE students
ADD UNIQUE INDEX uni_name (name);
UNIQUE關鍵字告訴SQL添加的是唯一索引
也可以對某個列添加唯一約束但是不創建唯一索引
ALTER TABLE students
ADD CONSTRAINT uni_name UNIQUE (name);
在關系數據庫中查詢的時候,如果有索引,數據庫系統就會根據索引來提高查找效率。索引用于數據庫查找的優化。
總結
以上是生活随笔為你收集整理的MySQL什么是关系_MySQL教程-关系模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 500万内“最好”的车 在中国没能火起来
- 下一篇: 招行账单分期影响提额吗 招行账单分期与提