關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)范式介紹

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:申請(qǐng)域名、雅安服務(wù)器托管、營(yíng)銷軟件、網(wǎng)站建設(shè)、安義網(wǎng)站維護(hù)、網(wǎng)站推廣。
.1 第一范式(1NF)無重復(fù)的列
所謂第一范式(1NF)是指數(shù)據(jù)庫(kù)表的每一列都是不可分割的基本數(shù)據(jù)項(xiàng),同一列中不能有多個(gè)值,即實(shí)體中的某個(gè)屬性不能有多個(gè)值或者不能有重復(fù)的屬性。如果出現(xiàn)重復(fù)的屬性,就可能需要定義一個(gè)新的實(shí)體,新的實(shí)體由重復(fù)的屬性構(gòu)成,新實(shí)體與原實(shí)體之間為一對(duì)多關(guān)系。在第一范式(1NF)中表的每一行只包含一個(gè)實(shí)例的信息。簡(jiǎn)而言之,第一范式就是無重復(fù)的列。
說明:在任何一個(gè)關(guān)系數(shù)據(jù)庫(kù)中,第一范式(1NF)是對(duì)關(guān)系模式的基本要求,不滿足第一范式(1NF)的數(shù)據(jù)庫(kù)就不是關(guān)系數(shù)據(jù)庫(kù)。
1.2 第二范式(2NF)屬性完全依賴于主鍵[消除部分子函數(shù)依賴]
第二范式(2NF)是在第一范式(1NF)的基礎(chǔ)上建立起來的,即滿足第二范式(2NF)必須先滿足第一范式(1NF)。第二范式(2NF)要求數(shù)據(jù)庫(kù)表中的每個(gè)實(shí)例或行必須可以被惟一地區(qū)分。為實(shí)現(xiàn)區(qū)分通常需要為表加上一個(gè)列,以存儲(chǔ)各個(gè)實(shí)例的惟一標(biāo)識(shí)。例如員工信息表中加上了員工編號(hào)(emp_id)列,因?yàn)槊總€(gè)員工的員工編號(hào)是惟一的,因此每個(gè)員工可以被惟一區(qū)分。這個(gè)惟一屬性列被稱為主關(guān)鍵字或主鍵、主碼。
第二范式(2NF)要求實(shí)體的屬性完全依賴于主關(guān)鍵字。所謂完全依賴是指不能存在僅依賴主關(guān)鍵字一部分的屬性,如果存在,那么這個(gè)屬性和主關(guān)鍵字的這一部分應(yīng)該分離出來形成一個(gè)新的實(shí)體,新實(shí)體與原實(shí)體之間是一對(duì)多的關(guān)系。為實(shí)現(xiàn)區(qū)分通常需要為表加上一個(gè)列,以存儲(chǔ)各個(gè)實(shí)例的惟一標(biāo)識(shí)。簡(jiǎn)而言之,第二范式就是屬性完全依賴于主鍵。
1.3 第三范式(3NF)屬性不依賴于其它非主屬性[消除傳遞依賴]
滿足第三范式(3NF)必須先滿足第二范式(2NF)。簡(jiǎn)而言之,第三范式(3NF)要求一個(gè)數(shù)據(jù)庫(kù)表中不包含已在其它表中已包含的非主關(guān)鍵字信息。例如,存在一個(gè)部門信息表,其中每個(gè)部門有部門編號(hào)(dept_id)、部門名稱、部門簡(jiǎn)介等信息。那么在的員工信息表中列出部門編號(hào)后就不能再將部門名稱、部門簡(jiǎn)介等與部門有關(guān)的信息再加入員工信息表中。如果不存在部門信息表,則根據(jù)第三范式(3NF)也應(yīng)該構(gòu)建它,否則就會(huì)有大量的數(shù)據(jù)冗余。簡(jiǎn)而言之,第三范式就是屬性不依賴于其它非主屬性。
II、范式應(yīng)用實(shí)例剖析
下面以一個(gè)學(xué)校的學(xué)生系統(tǒng)為例分析說明,這幾個(gè)范式的應(yīng)用。首先第一范式(1NF):數(shù)據(jù)庫(kù)表中的字段都是單一屬性的,不可再分。這個(gè)單一屬性由基本類型構(gòu)成,包括整型、實(shí)數(shù)、字符型、邏輯型、日期型等。在當(dāng)前的任何關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)中,傻瓜也不可能做出不符合第一范式的數(shù)據(jù)庫(kù),因?yàn)檫@些DBMS不允許你把數(shù)據(jù)庫(kù)表的一列再分成二列或多列。因此,你想在現(xiàn)有的DBMS中設(shè)計(jì)出不符合第一范式的數(shù)據(jù)庫(kù)都是不可能的。
首先我們確定一下要設(shè)計(jì)的內(nèi)容包括那些。學(xué)號(hào)、學(xué)生姓名、年齡、性別、課程、課程學(xué)分、系別、學(xué)科成績(jī),系辦地址、系辦電話等信息。為了簡(jiǎn)單我們暫時(shí)只考慮這些字段信息。我們對(duì)于這些信息,說關(guān)心的問題有如下幾個(gè)方面。
學(xué)生有那些基本信息
學(xué)生選了那些課,成績(jī)是什么
每個(gè)課的學(xué)分是多少
學(xué)生屬于那個(gè)系,系的基本信息是什么。
2.1 第二范式(2NF)實(shí)例分析
首先我們考慮,把所有這些信息放到一個(gè)表中(學(xué)號(hào),學(xué)生姓名、年齡、性別、課程、課程學(xué)分、系別、學(xué)科成績(jī),系辦地址、系辦電話)下面存在如下的依賴關(guān)系。
(學(xué)號(hào))→ (姓名, 年齡,性別,系別,系辦地址、系辦電話)
(課程名稱) → (學(xué)分)
(學(xué)號(hào),課程)→ (學(xué)科成績(jī))
2.1.1 問題分析
因此不滿足第二范式的要求,會(huì)產(chǎn)生如下問題
數(shù)據(jù)冗余: 同一門課程由n個(gè)學(xué)生選修,"學(xué)分"就重復(fù)n-1次;同一個(gè)學(xué)生選修了m門課程,姓名和年齡就重復(fù)了m-1次。
更新異常:
1)若調(diào)整了某門課程的學(xué)分,數(shù)據(jù)表中所有行的"學(xué)分"值都要更新,否則會(huì)出現(xiàn)同一門課程學(xué)分不同的情況。
2)假設(shè)要開設(shè)一門新的課程,暫時(shí)還沒有人選修。這樣,由于還沒有"學(xué)號(hào)"關(guān)鍵字,課程名稱和學(xué)分也無法記錄入數(shù)據(jù)庫(kù)。
刪除異常 : 假設(shè)一批學(xué)生已經(jīng)完成課程的選修,這些選修記錄就應(yīng)該從數(shù)據(jù)庫(kù)表中刪除。但是,與此同時(shí),課程名稱和學(xué)分信息也被刪除了。很顯然,這也會(huì)導(dǎo)致插入異常。
2.1.2 解決方案
把選課關(guān)系表SelectCourse改為如下三個(gè)表:
學(xué)生:Student(學(xué)號(hào),姓名, 年齡,性別,系別,系辦地址、系辦電話);
課程:Course(課程名稱, 學(xué)分);
選課關(guān)系:SelectCourse(學(xué)號(hào), 課程名稱, 成績(jī))。
2.2 第三范式(3NF)實(shí)例分析
接著看上面的學(xué)生表Student(學(xué)號(hào),姓名, 年齡,性別,系別,系辦地址、系辦電話),關(guān)鍵字為單一關(guān)鍵字"學(xué)號(hào)",因?yàn)榇嬖谌缦聸Q定關(guān)系:
(學(xué)號(hào))→ (姓名, 年齡,性別,系別,系辦地址、系辦電話)
但是還存在下面的決定關(guān)系
(學(xué)號(hào)) → (所在學(xué)院)→(學(xué)院地點(diǎn), 學(xué)院電話)
即存在非關(guān)鍵字段"學(xué)院地點(diǎn)"、"學(xué)院電話"對(duì)關(guān)鍵字段"學(xué)號(hào)"的傳遞函數(shù)依賴。
它也會(huì)存在數(shù)據(jù)冗余、更新異常、插入異常和刪除異常的情況。 (數(shù)據(jù)的更新,刪除異常這里就不分析了,可以參照2.1.1進(jìn)行分析)
根據(jù)第三范式把學(xué)生關(guān)系表分為如下兩個(gè)表就可以滿足第三范式了:
學(xué)生:(學(xué)號(hào), 姓名, 年齡, 性別,系別);
系別:(系別, 系辦地址、系辦電話)。
總結(jié)
上面的數(shù)據(jù)庫(kù)表就是符合I,II,III范式的,消除了數(shù)據(jù)冗余、更新異常、插入異常和刪除異常。
在JAVA開發(fā)中數(shù)據(jù)庫(kù)的學(xué)習(xí)也是我們需要了解的,截下來幾篇文章都是關(guān)于數(shù)據(jù)庫(kù)的設(shè)計(jì)和應(yīng)用,那么java課程培訓(xùn)機(jī)構(gòu)廢話不多說開始學(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)合主鍵而言)。也就是說在一個(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ì)過程的基礎(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ì)一
不管多少字段,都要滿足三大范式就行了,
三大范式:
第一范式,又稱1NF,它指的是在一個(gè)應(yīng)用中的數(shù)據(jù)都可以組織成由行和列的表格形式,且表格的任意一個(gè)行列交叉點(diǎn)即單元格,都不可再劃分為行和列的形式,實(shí)際上任意一張表格都滿足1NF;
第二范式,又稱2NF,它指的是在滿足1NF的基礎(chǔ)上,一張數(shù)據(jù)表中的任何非主鍵字段都全部依賴于主鍵字段,沒有任何非主鍵字段只依賴于主鍵字段的一部分。即,可以由主鍵字段來唯一的確定一條記錄。比如學(xué)號(hào)+課程號(hào)的聯(lián)合主鍵,可以唯一的確定某個(gè)成績(jī)是哪個(gè)學(xué)員的哪門課的成績(jī),缺少學(xué)號(hào)或者缺少課程號(hào),都不能確定成績(jī)的意義。
第三范式,又稱3NF,它是指在滿足2NF的基礎(chǔ)上,數(shù)據(jù)表的任何非主鍵字段之間都不產(chǎn)生函數(shù)依賴,即非主鍵字段之間沒有依賴關(guān)系,全部只依賴于主鍵字段。例如將學(xué)員姓名和所屬班級(jí)名稱放在同一張表中是不科學(xué)的,因?yàn)閷W(xué)員依賴于班級(jí),可將學(xué)員信息和班級(jí)信息單獨(dú)存放,以滿足3NF。
Mysql是目前互聯(lián)網(wǎng)使用最廣的關(guān)系數(shù)據(jù)庫(kù),關(guān)系數(shù)據(jù)庫(kù)的本質(zhì)是將問題分解為多個(gè)分類然后通過關(guān)系來查詢。 一個(gè)經(jīng)典的問題是用戶借書,三張表,一個(gè)用戶,一個(gè)書,一個(gè)借書的關(guān)系表。當(dāng)需要查詢某個(gè)用戶借書情況或者是書被那些人借了,就用關(guān)系查詢來實(shí)現(xiàn)。
關(guān)系數(shù)據(jù)庫(kù)范式
來自英文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)操作異常。總共有六種范式:第一范式(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處理的是無損連接問題,這個(gè)范式基本沒有實(shí)際意義,因?yàn)闊o損連接很少出現(xiàn),而且難以察覺。而域鍵范式試圖定義一個(gè)終極范式,該范式考慮所有的依賴和約束類型,但是實(shí)用價(jià)值也是最小的,只存在理論研究中。
Catalog和Schema
是數(shù)據(jù)庫(kù)對(duì)象命名空間中的層次,主要用來解決命名沖突的問題。從概念上說,一個(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é)還有自連接,是指查詢中的兩張表是同一張表,它通常作為外部語句用來代替從相同表中檢索數(shù)據(jù)時(shí)使用的子查詢。自然聯(lián)結(jié)使每個(gè)列只返回一次。外部聯(lián)結(jié)是指聯(lián)結(jié)包含了那些在相關(guān)表中沒有關(guān)聯(lián)行的行。例如列出所有產(chǎn)品及其訂購(gòu)數(shù)量,包括沒有人訂購(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ǔ)過程類似于批處理,包含了一條或多條SQL語句。語法:
CREATE PROCEDURE name()
BEGIN
SQL
END
-------------------------
CALL name()//來調(diào)用存儲(chǔ)過程
游標(biāo)有DECLARE定義,游標(biāo)與存儲(chǔ)過程是綁定的,存儲(chǔ)過程處理完成,游標(biāo)就會(huì)消失。游標(biāo)被打開后可以使用FETCH語句訪問每一行。
觸發(fā)器是在某個(gè)時(shí)間發(fā)生時(shí)自動(dòng)執(zhí)行某條SQL語句。語法:
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ù)語。ROLLBACK只能在一個(gè)事務(wù)處理內(nèi)使用。他不能回退CREATE和DROP操作。使用COMMIT保證事務(wù)提交。復(fù)雜的事務(wù)處理需要部分提交或回退,因此我們需要使用保留點(diǎn)SAVEPOINT。可以使用ROLLBACK TO savepoint_name。保留點(diǎn)越多越好。保留點(diǎn)在事務(wù)執(zhí)行完成后自動(dòng)釋放。
第一范式:要求有主鍵,并且要求每一個(gè)字段原子性不可再分;
第二范式:要求所有非主鍵字段完全依賴主鍵,而不能是依賴于主鍵的一部分;
第三范式:要求非主鍵列只依賴于主鍵,不依賴于其他非主鍵;
解釋:
網(wǎng)頁題目:mysql第一范式怎么寫 mysql標(biāo)準(zhǔn)寫法
當(dāng)前鏈接:http://chinadenli.net/article10/hppido.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、企業(yè)建站、靜態(tài)網(wǎng)站、營(yíng)銷型網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)