Java 數(shù)據(jù)庫

Mysql是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),在WEB應(yīng)用方面MySQL是最好的RDBMS(Relational Database Management System:關(guān)系數(shù)據(jù)庫管理系統(tǒng))應(yīng)用軟件之一。本文將簡單介紹Mysql的一些知識。

  • NoSql(相對于傳統(tǒng)關(guān)系型數(shù)據(jù)庫)

    1. 不需要預(yù)定義模式、無共享框架、彈性可擴(kuò)展、分區(qū)、異步復(fù)制
    2. BASE特性,即相對于SQL數(shù)據(jù)庫的ACID特性,NoSQL數(shù)據(jù)庫犧牲一致性換取高可用性
    3. ACID : 是數(shù)據(jù)庫事務(wù)正確執(zhí)行的四個基本要素的縮寫,即原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)
  • NoSql使用場景:
    數(shù)據(jù)模式簡單、對靈活性要求更強(qiáng)的IT系統(tǒng)、對數(shù)據(jù)庫性能要求比較高、不需要高度的數(shù)據(jù)一致性、對于給定Key,比較容易映射負(fù)責(zé)制的環(huán)境

MySQL

  • MySQL(關(guān)系數(shù)據(jù)庫) 特點(diǎn):
    1. 數(shù)據(jù)以表格的形式出現(xiàn)
    2. 每行為各種記錄名稱
    3. 每列為記錄名稱所對應(yīng)的數(shù)據(jù)域
    4. 許多的行和列組成一張表單
    5. 若干的表單組成database

每一行稱為“記錄”或“元組”
每一列成為“字段”或“屬性”

主鍵:主鍵是唯一的。一個數(shù)據(jù)表中只能包含一個主鍵。你可以使用主鍵來查詢數(shù)據(jù)。
外鍵:外鍵用于關(guān)聯(lián)兩個表。
復(fù)合鍵:復(fù)合鍵(組合鍵)將多個列作為一個索引鍵,一般用于復(fù)合索引。

外鍵(Foreign Key)表示了兩個關(guān)系表之間的相關(guān)聯(lián)系
好處:保持?jǐn)?shù)據(jù)一致性,完整性,外鍵只能引用外表中的列的值或使用空值
設(shè)置外鍵約束禁用:SET FOREIGN_KEY_CHECKS = 0
設(shè)置外鍵約束啟用:SET FOREIGN_KEY_CHECKS = 1

什么時候需要禁用外鍵約束呢?
當(dāng)我們要遷移一整個數(shù)據(jù)庫的時候,當(dāng)你執(zhí)行一個插入一句的時候,如果這個表有外鍵存在,數(shù)據(jù)庫會先去檢查這個外鍵是否存在,如不存在,則插入失敗;實(shí)際的環(huán)境中數(shù)據(jù)庫往往具有大量的表,我們無法保證我們執(zhí)行插入操作的時候該表的外鍵已經(jīng)在數(shù)據(jù)庫里了,但我們知道它肯定會插到這個數(shù)據(jù)庫里,但是我們先插入了一個引用了這個外鍵的表就會出現(xiàn)插入失敗的情況,所以我們?yōu)榱吮苊膺@個情況的發(fā)生,我們可以先暫時地禁用外鍵約束,等待所有數(shù)據(jù)都插入完畢后再打開外鍵約束。

完整性約束:

  1. 實(shí)體完整性約束:主屬性不能為空且是唯一值

  2. 參照完整性約束:關(guān)系中不允許引用不存在的實(shí)體

  3. 用戶自定義完整性約束:針對某一具體的關(guān)系(例:成績字段只能取1~100)

  • 視圖(view)的幾個優(yōu)點(diǎn):
    1. 安全
    2. 簡化查詢
    3. 自定義數(shù)據(jù)結(jié)構(gòu)
    4. 獨(dú)立邏輯數(shù)據(jù)

常用語句:
SELECT - 從數(shù)據(jù)庫表中獲取數(shù)據(jù)
UPDATE - 更新數(shù)據(jù)庫表中的數(shù)據(jù)
DELETE - 從數(shù)據(jù)庫表中刪除數(shù)據(jù)
INSERT INTO - 向數(shù)據(jù)庫表中插入數(shù)據(jù)

CREATE DATABASE - 創(chuàng)建新數(shù)據(jù)庫
ALTER DATABASE - 修改數(shù)據(jù)庫
CREATE TABLE - 創(chuàng)建新表
ALTER TABLE - 變更(改變)數(shù)據(jù)庫表
DROP TABLE - 刪除表
CREATE INDEX - 創(chuàng)建索引(搜索鍵)
DROP INDEX - 刪除索引


設(shè)計(jì)數(shù)據(jù)庫的步驟:

  1. 確定所有的實(shí)體集合
  2. 選擇實(shí)體集合應(yīng)包含的屬性
  3. 確定實(shí)體集之間的聯(lián)系
  4. 確定實(shí)體集的關(guān)鍵字,用下劃線在屬性上標(biāo)明關(guān)鍵字的屬性組合
  5. 確定聯(lián)系的類型,在用線將表示聯(lián)系的菱形框聯(lián)系到實(shí)體集時,在線旁注明是1或n來表示聯(lián)系的類型

級聯(lián)操作:(cascade)
級聯(lián)刪除、級聯(lián)更新
設(shè)置級聯(lián)操作可以保證數(shù)據(jù)完整性,但級聯(lián)關(guān)系會使得數(shù)據(jù)變的不可控
不建議使用級聯(lián)關(guān)系 ?。?!

范式:

為滿足不同數(shù)據(jù)庫設(shè)計(jì)要求,減少數(shù)據(jù)冗余而制定的設(shè)計(jì)規(guī)范,可稱為數(shù)據(jù)庫范式。
數(shù)據(jù)庫范式呈遞次規(guī)范,即高階范式必然滿足低階范式。
越高的數(shù)據(jù)庫范式意味著越嚴(yán)格的沙灘車要求,同時數(shù)據(jù)庫冗余越小。

  1. 第一范式(1NF):是對屬性的原子性約束,要求屬性具有原子性,不可再分解
    數(shù)據(jù)庫表的每一列都是不可分割的基本數(shù)據(jù)項(xiàng),同一列中不能有多個值

  2. 第二范式(2NF):要求實(shí)體的屬性完全依賴于主關(guān)鍵字(針對聯(lián)合主鍵的表)
    通常:把一個多對多關(guān)系拆分成兩個一對多關(guān)系

  3. 第三范式(3NF):要求一個關(guān)系中不包含在其他關(guān)系已包含的非主關(guān)鍵字信息
    所有非主關(guān)鍵字必須完全依賴主關(guān)鍵字

還有BCNF、第四范式第五范式,本文不做討論。

圖片取自知乎

范式越高,數(shù)據(jù)的冗余度越小。其實(shí)沒有冗余的數(shù)據(jù)庫設(shè)計(jì)是可以做到的。但是,沒有冗余的數(shù)據(jù)庫未必是最好的數(shù)據(jù)庫,有時為了提高運(yùn)行效率,就必須降低范式標(biāo)準(zhǔn),適當(dāng)保留冗余數(shù)據(jù)。一般來說,一個數(shù)據(jù)庫設(shè)計(jì)符合3NF就可以了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容