第一范式:1NF是對(duì)屬性的原子性約束,要求屬性具有原子性,不可再分解;
向陽(yáng)網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)建站成立于2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
第二范式:2NF是對(duì)記錄的惟一性約束,要求記錄有惟一標(biāo)識(shí),即實(shí)體的惟一性;
第三范式:3NF是對(duì)字段冗余性的約束,即任何字段不能由其他字段派生出來(lái),它要求字段沒(méi)有冗余。
第一范式:要求有主鍵,并且要求每一個(gè)字段原子性不可再分;
第二范式:要求所有非主鍵字段完全依賴主鍵,而不能是依賴于主鍵的一部分;
第三范式:要求非主鍵列只依賴于主鍵,不依賴于其他非主鍵;
解釋:
在JAVA開(kāi)發(fā)中數(shù)據(jù)庫(kù)的學(xué)習(xí)也是我們需要了解的,截下來(lái)幾篇文章都是關(guān)于數(shù)據(jù)庫(kù)的設(shè)計(jì)和應(yīng)用,那么java課程培訓(xùn)機(jī)構(gòu)廢話不多說(shuō)開(kāi)始學(xué)習(xí)吧!
數(shù)據(jù)庫(kù)的設(shè)計(jì)
數(shù)據(jù)庫(kù)設(shè)計(jì)是基礎(chǔ),數(shù)據(jù)庫(kù)優(yōu)化是建立在設(shè)計(jì)基礎(chǔ)之上的。好的數(shù)據(jù)庫(kù)一定擁有好的設(shè)計(jì)。
數(shù)據(jù)庫(kù)設(shè)計(jì)的目標(biāo)是為用戶和各種應(yīng)用系統(tǒng)提供一個(gè)信息基礎(chǔ)設(shè)施和高效的運(yùn)行環(huán)境。
數(shù)據(jù)庫(kù)的三大范式
第一范式1NF:所有的域都應(yīng)該是原子性的,即數(shù)據(jù)庫(kù)表的每一列都是不可分割的原子數(shù)據(jù)項(xiàng),而不能是集合,數(shù)組,記錄等非原子數(shù)據(jù)項(xiàng)。
第二范式2Nf:第二范式在第一范式的基礎(chǔ)之上更進(jìn)一層。第二范式需要確保數(shù)據(jù)庫(kù)表中的每一列都和主鍵相關(guān),而不能只與主鍵的某一部分相關(guān)(主要針對(duì)聯(lián)合主鍵而言)。也就是說(shuō)在一個(gè)數(shù)據(jù)庫(kù)表中,一個(gè)表中只能保存一種數(shù)據(jù),不可以把多種數(shù)據(jù)保存在同一張數(shù)據(jù)庫(kù)表中。
第三范式3Nf:所有字段必須與主鍵直接相關(guān),而不是間接相關(guān)。也可以理解為字段不要和其他非主鍵字段相關(guān).
注意:這三個(gè)范式盡可能去遵守,不是一定要墨守成規(guī).這只是讓我們?cè)O(shè)計(jì)的表的時(shí)候,越靠近這些范式,可以使字段盡量的減小冗余.但是有時(shí)候也可以根據(jù)實(shí)際需要小小的違背一下.但是第三范式違反一下還可以接受,但是第一范式別違反.
數(shù)據(jù)庫(kù)設(shè)計(jì)的步驟
需求分析階段
準(zhǔn)確了解與分析用戶需求(包括數(shù)據(jù)與處理)。是整個(gè)設(shè)計(jì)過(guò)程的基礎(chǔ),是最困難、最耗費(fèi)時(shí)間的一步。
概念結(jié)構(gòu)設(shè)計(jì)階段
是整個(gè)數(shù)據(jù)庫(kù)設(shè)計(jì)的關(guān)鍵--設(shè)計(jì)數(shù)據(jù)庫(kù)的E-R模型圖,確認(rèn)需求信息的正確和完整
Entity_Relationship---實(shí)體之間的關(guān)系
一對(duì)一
一對(duì)多
多對(duì)一
Mysql是目前互聯(lián)網(wǎng)使用最廣的關(guān)系數(shù)據(jù)庫(kù),關(guān)系數(shù)據(jù)庫(kù)的本質(zhì)是將問(wèn)題分解為多個(gè)分類然后通過(guò)關(guān)系來(lái)查詢。 一個(gè)經(jīng)典的問(wèn)題是用戶借書(shū),三張表,一個(gè)用戶,一個(gè)書(shū),一個(gè)借書(shū)的關(guān)系表。當(dāng)需要查詢某個(gè)用戶借書(shū)情況或者是書(shū)被那些人借了,就用關(guān)系查詢來(lái)實(shí)現(xiàn)。
關(guān)系數(shù)據(jù)庫(kù)范式
來(lái)自英文Normal form,簡(jiǎn)稱NF。要想設(shè)計(jì)—個(gè)好的關(guān)系,必須使關(guān)系滿足一定的約束條件,滿足這些規(guī)范的數(shù)據(jù)庫(kù)是簡(jiǎn)潔的、結(jié)構(gòu)明晰的,同時(shí),不會(huì)發(fā)生插入(insert)、刪除(delete)和更新(update)操作異常??偣灿辛N范式:第一范式(1NF)、第二范式(2NF)、 第三范式 (3NF)、巴斯-科德范式(BCNF)、 第四范式 (4NF)和 第五范式 (5NF,又稱完美范式)。
1NF是指數(shù)據(jù)庫(kù)表的每一列都是不可分割的原子數(shù)據(jù)項(xiàng)。2NF必須滿足1NF,要求數(shù)據(jù)庫(kù)表中的每行記錄必須可以被唯一地區(qū)分。3NF在2NF基礎(chǔ)上,任何非主 屬性 不依賴于其它非主屬性(在2NF基礎(chǔ)上消除傳遞依賴)。BCNF是在3NF基礎(chǔ)上,任何非主屬性不能對(duì)主鍵子集依賴(在3NF基礎(chǔ)上消除對(duì)主碼子集的依賴), 滿足BCNF不再會(huì)有任何由于函數(shù)依賴導(dǎo)致的異常,但是我們還可能會(huì)遇到由于多值依賴導(dǎo)致的異常。4NF的定義很簡(jiǎn)單:已經(jīng)是BC范式,并且不包含多值依賴關(guān)系。5NF處理的是無(wú)損連接問(wèn)題,這個(gè)范式基本沒(méi)有實(shí)際意義,因?yàn)闊o(wú)損連接很少出現(xiàn),而且難以察覺(jué)。而域鍵范式試圖定義一個(gè)終極范式,該范式考慮所有的依賴和約束類型,但是實(shí)用價(jià)值也是最小的,只存在理論研究中。
Catalog和Schema
是數(shù)據(jù)庫(kù)對(duì)象命名空間中的層次,主要用來(lái)解決命名沖突的問(wèn)題。從概念上說(shuō),一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)包含多個(gè)Catalog,每個(gè)Catalog又包含多個(gè)Schema,而每個(gè)Schema又包含多個(gè)數(shù)據(jù)庫(kù)對(duì)象(表、視圖、字段等)。但是Mysql的數(shù)據(jù)庫(kù)名就是Schema,不支持Catalog。
Mysql的數(shù)據(jù)庫(kù)引擎主要有兩種MyISAM和InnoDB,MyISAM支持全文檢索,InnoDB支持事務(wù)。
SQL中的通配符‘%’代表任意字符出現(xiàn)任意次數(shù)?!甠’代表任意字符出現(xiàn)一次。SQL與正則表達(dá)式結(jié)合查詢一般用在WHERE table_name REGEXP '^12.34'。子查詢是從里到外執(zhí)行。
數(shù)據(jù)庫(kù)聯(lián)結(jié)(join)涉及到外鍵,外鍵是指一個(gè)表的列是另一個(gè)表的主鍵,那么它就是外鍵。笛卡爾積聯(lián)結(jié)(不指定聯(lián)結(jié)條件時(shí))生成的記錄條目是單純的第一個(gè)表的行乘以第二個(gè)表的列數(shù)。用得最多的是等值聯(lián)結(jié)也叫內(nèi)部聯(lián)結(jié)。
高級(jí)聯(lián)結(jié)還有自連接,是指查詢中的兩張表是同一張表,它通常作為外部語(yǔ)句用來(lái)代替從相同表中檢索數(shù)據(jù)時(shí)使用的子查詢。自然聯(lián)結(jié)使每個(gè)列只返回一次。外部聯(lián)結(jié)是指聯(lián)結(jié)包含了那些在相關(guān)表中沒(méi)有關(guān)聯(lián)行的行。例如列出所有產(chǎn)品及其訂購(gòu)數(shù)量,包括沒(méi)有人訂購(gòu)的產(chǎn)品。LEFT OUTER JOIN指選擇左邊表的所有行。
組合查詢是指采用UNION等將兩個(gè)查詢結(jié)果取并集。
視圖是查看存儲(chǔ)在別處的數(shù)據(jù)的一種工具,它本身并不包含數(shù)據(jù),因此表的數(shù)據(jù)修改了,視圖返回的數(shù)據(jù)也將隨之修改,因此如果使用了復(fù)雜或嵌套視圖會(huì)對(duì)性能有較大的影響。視圖的作用之一是隱藏復(fù)雜的SQL通常會(huì)涉及到聯(lián)結(jié)查詢。
存儲(chǔ)過(guò)程類似于批處理,包含了一條或多條SQL語(yǔ)句。語(yǔ)法:
CREATE PROCEDURE name()
BEGIN
SQL
END
-------------------------
CALL name()//來(lái)調(diào)用存儲(chǔ)過(guò)程
游標(biāo)有DECLARE定義,游標(biāo)與存儲(chǔ)過(guò)程是綁定的,存儲(chǔ)過(guò)程處理完成,游標(biāo)就會(huì)消失。游標(biāo)被打開(kāi)后可以使用FETCH語(yǔ)句訪問(wèn)每一行。
觸發(fā)器是在某個(gè)時(shí)間發(fā)生時(shí)自動(dòng)執(zhí)行某條SQL語(yǔ)句。語(yǔ)法:
CREATE TRIGGER name AFTER INSERT ON talbe_name FOR EACH ROW
事務(wù)處理可以維護(hù)數(shù)據(jù)庫(kù)的完整性,保證批量的操作要么完全執(zhí)行,要么完全不執(zhí)行。包括事務(wù)、回退、提交、保留點(diǎn)幾個(gè)關(guān)鍵術(shù)語(yǔ)。ROLLBACK只能在一個(gè)事務(wù)處理內(nèi)使用。他不能回退CREATE和DROP操作。使用COMMIT保證事務(wù)提交。復(fù)雜的事務(wù)處理需要部分提交或回退,因此我們需要使用保留點(diǎn)SAVEPOINT??梢允褂肦OLLBACK TO savepoint_name。保留點(diǎn)越多越好。保留點(diǎn)在事務(wù)執(zhí)行完成后自動(dòng)釋放。
選中某個(gè)表,然后右鍵點(diǎn)擊,選擇“設(shè)計(jì)表”即可。
也可以左鍵點(diǎn)擊某個(gè)表(即選中某表),在上面輔助菜單欄里有“打開(kāi)表”、“設(shè)計(jì)表”、“新建表”等按鈕可點(diǎn)擊,點(diǎn)擊“設(shè)計(jì)表”按鈕即可。
進(jìn)入后,會(huì)彈出新的操作窗口,新窗口的菜單欄里有常用的修改表結(jié)構(gòu)的按鈕,右鍵點(diǎn)擊某列字段也可以彈出相應(yīng)的修改表的操作按鈕。
其它摸索著看提示操作即可,還是很簡(jiǎn)單的。
修改好表后點(diǎn)擊菜單欄上的“保存”按鈕即可。
注:若要查看修改表的sql語(yǔ)句,必須在“保存”之前點(diǎn)擊“SQL預(yù)覽”按鈕。