版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
重慶正大軟件學(xué)院軟件系《MVC框架程序設(shè)計(jì)》電子教案重慶正大軟件學(xué)院軟件系《MVC框架程序設(shè)計(jì)》課程組重慶正大軟件職業(yè)技術(shù)學(xué)院教案(項(xiàng)目類)授課對(duì)象系別軟件系本次課學(xué)時(shí)4學(xué)時(shí)年級(jí)班次大二章節(jié)題目第6章項(xiàng)目需求分析目的要求(含技能要求)理解概要設(shè)計(jì)的概念理解概要設(shè)計(jì)的過程理解模塊概念和模塊化原則,會(huì)進(jìn)行模塊化(綜合應(yīng)用)理解數(shù)據(jù)庫設(shè)計(jì)的內(nèi)容E-R圖的制作(綜合應(yīng)用)本節(jié)重點(diǎn)理解數(shù)據(jù)庫設(shè)計(jì)的內(nèi)容本節(jié)難點(diǎn)理解數(shù)據(jù)庫設(shè)計(jì)的內(nèi)容教學(xué)方法項(xiàng)目教學(xué)法教學(xué)用具機(jī)房、屏幕廣播問題引入通過簡(jiǎn)化進(jìn)銷存項(xiàng)目,從而引出本次課程。難點(diǎn)與重點(diǎn)講解方法引導(dǎo)、分析、講解、實(shí)作演示本次課小結(jié)課程小結(jié)教后禮記討論、思考題、作業(yè)(含實(shí)訓(xùn)作業(yè))完成本次課的課堂任務(wù)填寫實(shí)驗(yàn)報(bào)告任務(wù)介紹(5分鐘)根據(jù)簡(jiǎn)化供銷存系統(tǒng)的需求說明書,進(jìn)行概要設(shè)計(jì),形成相應(yīng)的概要設(shè)計(jì)說明書。任務(wù)解析(50-60分鐘)軟件系統(tǒng)模塊化制定本系統(tǒng)的體系結(jié)構(gòu)進(jìn)行數(shù)據(jù)設(shè)計(jì)詳細(xì)步驟軟件系統(tǒng)模塊化根據(jù)需求分析中的功能界定,結(jié)合本節(jié)任務(wù)解析中模塊化的相關(guān)內(nèi)容進(jìn)行簡(jiǎn)化進(jìn)銷存系統(tǒng)的模塊化如圖6.2-8所示。圖6.2-8簡(jiǎn)化進(jìn)銷存模塊化制定本系統(tǒng)的體系結(jié)構(gòu)使用SSH框架的體系結(jié)構(gòu)如圖6.2-9所示。圖6.2-9系統(tǒng)的體系結(jié)構(gòu)進(jìn)行數(shù)據(jù)設(shè)計(jì)首先,按照任務(wù)解析的相關(guān)內(nèi)容設(shè)計(jì)本系統(tǒng)E-R圖的概念模型,如圖6.2-10所示,本書這里采用了靜態(tài)模型的類圖來描述簡(jiǎn)化進(jìn)銷存系統(tǒng)的E-R圖,作圖軟件使用的是微軟的visio2007。圖6.2-10本系統(tǒng)E-R圖的概念模型其次,按照?qǐng)D6.2-10并根據(jù)hibernate框架的實(shí)體類設(shè)計(jì)規(guī)范編寫實(shí)體類和對(duì)應(yīng)的映射文件。分別如下:(本書將所有實(shí)體類和映射文件存放在com.zds.slms.domain包下)客戶檔案:實(shí)體類Client.java關(guān)鍵代碼如下:publicclassClientimplementsjava.io.Serializable{ privateIntegerid; privateStringcode; privateStringname; privateStringaddress; privateStringtelephone; privateStringemail; privateSetstockins=newHashSet(0); privateSetstockorders=newHashSet(0); publicClient(){ } publicClient(Stringcode,Stringname,Stringaddress,Stringtelephone){ this.code=code; =name; this.address=address; this.telephone=telephone; } publicClient(Stringcode,Stringname,Stringaddress,Stringtelephone, Stringemail,Setstockins,Setstockorders){ this.code=code; =name; this.address=address; this.telephone=telephone; this.email=email; this.stockins=stockins; this.stockorders=stockorders; }//成員變量的GET/SET方法這里略}客戶檔案:實(shí)體類映射文件Client.hbm.xml關(guān)鍵源代碼如下:<hibernate-mapping> <classname="com.zds.slms.domain.Client"table="client"> <idname="id"type="java.lang.Integer"> <columnname="id"/> <generatorclass="identity"/> </id> <propertyname="code"type="string"> <columnname="code"length="3"not-null="true"> <comment>客戶編號(hào)</comment> </column> </property> <propertyname="name"type="string"> <columnname="name"length="50"not-null="true"> <comment>客戶名稱</comment> </column> </property> <propertyname="address"type="string"> <columnname="address"length="50"not-null="true"> <comment>地址</comment> </column> </property> <propertyname="telephone"type="string"> <columnname="telephone"length="30"not-null="true"> <comment>電話</comment> </column> </property> <propertyname="email"type="string"> <columnname="email"length="30"> <comment>電子郵件</comment> </column> </property> <setname="stockins"table="stockin"inverse="true"lazy="true" fetch="select"cascade="all-delete-orphan"> <key> <columnname="clientid"not-null="true"> <comment>進(jìn)貨單</comment> </column> </key> <one-to-manyclass="com.zds.slms.domain.Stockin"/> </set> <setname="stockorders"table="stockorder"inverse="true"lazy="true" fetch="select"cascade="all-delete-orphan"> <key> <columnname="clientid"not-null="true"> <comment>訂貨單</comment> </column> </key> <one-to-manyclass="com.zds.slms.domain.Stockorder"/> </set> </class></hibernate-mapping>員工檔案:實(shí)體類Employee.java關(guān)鍵代碼如下:publicclassEmployeeimplementsjava.io.Serializable{ privateIntegerid; privateStringcode; privateStringname; privateStringbirthday; privatebooleansex; privateStringtelephone; privateStringemail; privateSetstockins=newHashSet(0); privateSetstockorders=newHashSet(0); publicEmployee(){ } publicEmployee(Stringcode,Stringname,Stringbirthday,booleansex, Stringtelephone){ this.code=code; =name; this.birthday=birthday; this.sex=sex; this.telephone=telephone; } publicEmployee(Stringcode,Stringname,Stringbirthday,booleansex, Stringtelephone,Stringemail,Setstockins,Setstockorders){ this.code=code; =name; this.birthday=birthday; this.sex=sex; this.telephone=telephone; this.email=email; this.stockins=stockins; this.stockorders=stockorders; } publicvoidsetBirthday(Stringbirthday){ if(null!=birthday&&birthday.length()>=10){ birthday=birthday.substring(0,10); } this.birthday=birthday; } //通常的成員變量的get/set方法這里略}員工檔案:實(shí)體類映射文件Employee.hbm.xml關(guān)鍵代碼如下:<hibernate-mapping><classname="com.zds.slms.domain.Employee"table="employee"><idname="id"type="java.lang.Integer"><columnname="id"/><generatorclass="identity"/></id><propertyname="code"type="string"><columnname="code"length="3"not-null="true"><comment>員工編號(hào)</comment></column></property><propertyname="name"type="string"><columnname="name"length="10"not-null="true"><comment>姓名</comment></column></property><propertyname="birthday"type="string"><columnname="birthday"length="10"not-null="true"><comment>出生日期</comment></column></property><propertyname="sex"type="boolean"><columnname="sex"not-null="true"><comment>性別(0-女,1-男)</comment></column></property><propertyname="telephone"type="string"><columnname="telephone"length="30"not-null="true"><comment>電話</comment></column></property><propertyname="email"type="string"><columnname="email"length="30"><comment>電子郵件</comment></column></property><setname="stockins"table="stockin"inverse="true"lazy="true"fetch="select"cascade="all-delete-orphan"><key><columnname="employeeid"not-null="true"/></key><one-to-manyclass="com.zds.slms.domain.Stockin"/></set><setname="stockorders"table="stockorder"inverse="true"lazy="true"fetch="select"cascade="all-delete-orphan"><key><columnname="handleoperatorid"not-null="true"><comment>訂貨單</comment></column></key><one-to-manyclass="com.zds.slms.domain.Stockorder"/></set></class></hibernate-mapping>商品檔案:實(shí)體類Merchandise.java的關(guān)鍵代碼如下:publicclassMerchandiseimplementsjava.io.Serializable{ privateIntegerid; privateStringcode; privateStringname; privatefloatprice; privateSetstockins=newHashSet(0); privateSetstockorders=newHashSet(0); publicMerchandise(){ } publicMerchandise(Stringcode,Stringname,floatprice){ this.code=code; =name; this.price=price; } publicMerchandise(Stringcode,Stringname,floatprice,Setstockins, Setstockorders){ this.code=code; =name; this.price=price; this.stockins=stockins; this.stockorders=stockorders; } //通常的成員變量的get/set方法這里省略}商品檔案:實(shí)體類映射文件Merchandise.hbm.xml的關(guān)鍵代碼如下:<hibernate-mapping><classname="com.zds.slms.domain.Merchandise"table="merchandise"><idname="id"type="java.lang.Integer"><columnname="id"/><generatorclass="identity"/></id><propertyname="code"type="string"><columnname="code"length="3"not-null="true"><comment>商品編號(hào)</comment></column></property><propertyname="name"type="string"><columnname="name"length="50"not-null="true"><comment>商品名稱</comment></column></property><propertyname="price"type="float"><columnname="price"precision="5"scale="2"not-null="true"><comment>單價(jià)</comment></column></property><setname="stockins"table="stockin"inverse="true"lazy="true"fetch="select"cascade="all-delete-orphan"><key><columnname="merchandiseid"not-null="true"><comment>進(jìn)貨單</comment></column></key><one-to-manyclass="com.zds.slms.domain.Stockin"/></set><setname="stockorders"table="stockorder"inverse="true"lazy="true"fetch="select"cascade="all-delete-orphan"><key><columnname="merchandiseid"not-null="true"><comment>訂貨單</comment></column></key><one-to-manyclass="com.zds.slms.domain.Stockorder"/></set></class></hibernate-mapping>訂單:實(shí)體類Stockorder.java的關(guān)鍵代碼如下:publicclassStockorderimplementsjava.io.Serializable{ privateIntegerid; privateEmployeeemployee; privateMerchandisemerchandise; privateClientclient; privateStringcode; privateintmerchandisenumber; privateStringorderdate; publicStockorder(){ } publicStockorder(Employeeemployee,Merchandisemerchandise, Clientclient,Stringcode,intmerchandisenumber,Stringorderdate){ this.employee=employee; this.merchandise=merchandise; this.client=client; this.code=code; this.merchandisenumber=merchandisenumber; this.orderdate=orderdate; } publicvoidsetOrderdate(Stringorderdate){ if(null!=orderdate&&orderdate.length()>=10){ orderdate=orderdate.substring(0,10); } this.orderdate=orderdate; } //通常的成員變量get/set方法這里省略}訂單:實(shí)體類映射文件Stockorder.hbm.xml的關(guān)鍵代碼如下:<hibernate-mapping> <classname="com.zds.slms.domain.Stockorder"table="stockorder"> <idname="id"type="java.lang.Integer"> <columnname="id"/> <generatorclass="identity"/> </id> <many-to-onename="employee"class="com.zds.slms.domain.Employee" fetch="select"> <columnname="handleoperatorid"not-null="true"> <comment>員工編號(hào)</comment> </column> </many-to-one> <many-to-onename="merchandise"class="com.zds.slms.domain.Merchandise" fetch="select"> <columnname="merchandiseid"not-null="true"> <comment>商品編號(hào)</comment> </column> </many-to-one> <many-to-onename="client"class="com.zds.slms.domain.Client" fetch="select"> <columnname="clientid"not-null="true"> <comment>客戶編號(hào)</comment> </column> </many-to-one> <propertyname="code"type="string"> <columnname="code"length="11"not-null="true"> <comment>訂單編號(hào)</comment> </column> </property> <propertyname="merchandisenumber"type="int"> <columnname="merchandisenumber"not-null="true"> <comment>訂貨數(shù)量</comment> </column> </property> <propertyname="orderdate"type="string"> <columnname="orderdate"length="10"not-null="true"> <comment>訂貨日期</comment> </column> </property> </class></hibernate-mapping>進(jìn)貨單:實(shí)體類Stockin.java的關(guān)鍵代碼如下:publicclassStockinimplementsjava.io.Serializable{ privateIntegerid; privateMerchandisemerchandise; privateClientclient; privateEmployeeemployee; privateStringcode; privateintamount; privatefloatprice; privatefloatmoney; privateStringstockindate; publicStockin(){ } publicStockin(Merchandisemerchandise,Clientclient,Employeeemployee, Stringcode,intamount,floatprice,floatmoney, Stringstockindate){ this.merchandise=merchandise; this.client=client; this.employee=employee; this.code=code; this.amount=amount; this.price=price; this.money=money; this.stockindate=stockindate; } publicvoidsetStockindate(Stringstockindate){ if(null!=stockindate&&stockindate.length()>=10){ stockindate=stockindate.substring(0,10); } this.stockindate=stockindate; } //通常的成員變量get/set方法這里省略}進(jìn)貨單:實(shí)體類映射文件Stockin.hbm.xml的關(guān)鍵代碼如下:<hibernate-mapping> <classname="com.zds.slms.domain.Stockin"table="stockin"> <idname="id"type="java.lang.Integer"> <columnname="id"/> <generatorclass="identity"/> </id> <many-to-onename="merchandise"class="com.zds.slms.domain.Merchandise" fetch="select"> <columnname="merchandiseid"not-null="true"> <comment>商品編號(hào)</comment> </column> </many-to-one> <many-to-onename="client"class="com.zds.slms.domain.Client" fetch="select"> <columnname="clientid"not-null="true"> <comment>客戶編號(hào)</comment> </column> </many-to-one> <many-to-onename="employee"class="com.zds.slms.domain.Employee" fetch="select"> <columnname="employeeid"not-null="true"/> </many-to-one> <propertyname="code"type="string"> <columnname="code"length="11"not-null="true"> <comment>進(jìn)貨單編號(hào)</comment> </column> </property> <propertyname="amount"type="int"> <columnname="amount"not-null="true"> <comment>進(jìn)貨數(shù)量</comment> </column> </property> <propertyname="price"type="float"> <columnname="price"precision="5"scale="2"not-null="true"> <comment>進(jìn)貨單價(jià)</comment> </column> </property> <propertyname="money"type="float"> <columnname="money"precision="10"scale="2"not-null="true"> <comment>進(jìn)貨總額</comment> </column> </property> <propertyname="stockindate"type="string"> <columnname="stockindate"length="10"not-null="true"> <comment>進(jìn)貨日期</comment> </column> </property> </class></hibernate-mapping>到此為止,項(xiàng)目簡(jiǎn)化進(jìn)銷存的概要設(shè)計(jì)就算基本完成了根據(jù)任務(wù)提出問題(45-55分鐘)概要設(shè)計(jì)是干什么的?概要設(shè)計(jì)如何進(jìn)行?概要說明書要寫些什么?問題解析(45-55分鐘)了解概要設(shè)計(jì)概要設(shè)計(jì)是軟件項(xiàng)目在完成需求分析之后的首要步驟,其內(nèi)容是制定系統(tǒng)的設(shè)計(jì)方案,確定軟件的總體結(jié)構(gòu),在涉及到大型數(shù)據(jù)處理的系統(tǒng)時(shí),還需要進(jìn)行數(shù)據(jù)庫設(shè)計(jì)。概要設(shè)計(jì)目的:(1)將軟件系統(tǒng)需求轉(zhuǎn)換為未來系統(tǒng)的設(shè)計(jì);(2)逐步開發(fā)強(qiáng)壯的系統(tǒng)構(gòu)架;(3)使設(shè)計(jì)適合于實(shí)施環(huán)境,為提高性能而進(jìn)行設(shè)計(jì);(4)結(jié)構(gòu)應(yīng)該被分解為模塊和庫。概要設(shè)計(jì)的主要任務(wù):制定規(guī)范——代碼體系、接口規(guī)約、命名規(guī)則。這是項(xiàng)目小組今后共同作戰(zhàn)的基礎(chǔ),有了開發(fā)規(guī)范和程序模塊之間和項(xiàng)目成員彼此之間的接口規(guī)則、方式方法,大家就有了共同的工作語言、共同的工作平臺(tái),使整個(gè)軟件開發(fā)工作可以協(xié)調(diào)有序地進(jìn)行。概要設(shè)計(jì)如何進(jìn)行根據(jù)需求分析提出方案首先,列出項(xiàng)目需求分析階段及之前的相關(guān)文檔:需求規(guī)格說明書成本、效益分析進(jìn)度計(jì)劃需求分析的圖形工具(用例圖、業(yè)務(wù)流程圖等)其次,根據(jù)列出的文檔提出多個(gè)可能的項(xiàng)目實(shí)現(xiàn)方案(方案內(nèi)容主要包括:采用的技術(shù)方法,如是采用OO(面向?qū)ο螅┑姆椒?、還是結(jié)構(gòu)化的方法,是采用.net還是JAVA;總體的技術(shù)結(jié)構(gòu),如采用幾層體系結(jié)構(gòu),每層的責(zé)任是什么;系統(tǒng)的網(wǎng)絡(luò)結(jié)構(gòu),如系統(tǒng)的功能在網(wǎng)絡(luò)上的部署分布;核心技術(shù)難點(diǎn)的解決方案,如系統(tǒng)的核心算法等)。選取合理的方案從上一步得到的一系列供選擇的方案中選取若干個(gè)合理的方案,通常至少選取低成本、中等成本和高成本的三種方案。根據(jù)系統(tǒng)分析確定的目標(biāo),來判斷哪些方案是合理的。推薦最佳方案綜合分析對(duì)比各種合理方案的利弊,推薦一個(gè)最佳的方案。功能分解對(duì)用例圖、業(yè)務(wù)流程圖等進(jìn)一步細(xì)化,進(jìn)行功能分解。這一步為下一步模塊化做準(zhǔn)備。設(shè)計(jì)軟件結(jié)構(gòu)該步驟確定系統(tǒng)為實(shí)現(xiàn)用戶要求的功能需要哪些模塊;確定模塊的層次結(jié)構(gòu);確定模塊的相互調(diào)用關(guān)系:頂層模塊調(diào)用它的下層模塊以實(shí)現(xiàn)程序的完整功能,每個(gè)下層模塊再調(diào)用更下層的模塊,最下層的模塊完成最具體的功能。當(dāng)模塊劃分出來并具有層次關(guān)系后,軟件結(jié)構(gòu)也就確定了,一般通過圖形工具——層次圖或結(jié)構(gòu)圖來描繪軟件結(jié)構(gòu)。此步驟實(shí)質(zhì)就是確定模塊及模塊間的層次關(guān)系。關(guān)于模塊——模塊等于用戶提出的功能么?模塊的定義:具有四種屬性的一組程序語句稱為一個(gè)模塊。四種屬性是:輸入/輸出:一個(gè)模塊的輸入/輸出都是指同一個(gè)調(diào)用者。邏輯功能:指模塊能夠做什么事,表達(dá)了模塊把輸入轉(zhuǎn)換成輸出的功能,可以是單純的輸入/輸出功能。運(yùn)行程序:指模塊如何用程序?qū)崿F(xiàn)其邏輯功能。內(nèi)部數(shù)據(jù):指屬于模塊自己的數(shù)據(jù)??梢姡K并不等于功能。關(guān)于模塊的屬性——模塊有什么屬性呢?外部屬性:輸入/輸出、邏輯功能。內(nèi)部屬性:運(yùn)行程序、內(nèi)部數(shù)據(jù)。在結(jié)構(gòu)化系統(tǒng)設(shè)計(jì)中,人們主要關(guān)心的是模塊的外部屬性,至于內(nèi)部屬性,將在系統(tǒng)實(shí)施工作中完成。關(guān)于模塊的大小——它是固定大小的么?模塊有大有小,它可以是一個(gè)程序,也可以是程序中的一個(gè)程序段或者一個(gè)子程序。關(guān)于理想模塊(黑箱模塊)——是什么樣子的呢?理想模塊的特點(diǎn):(1)每個(gè)理想模塊只解決一個(gè)問題;(2)每個(gè)理想模塊的功能都應(yīng)該明確,使人容易理解;(3)理想模塊之間的聯(lián)結(jié)關(guān)系簡(jiǎn)單,具有獨(dú)立性;(4)由理想模塊構(gòu)成的系統(tǒng),容易使人理解,易于編程,易于測(cè)試,易于修改和維護(hù)。對(duì)程序員來說,理想模塊是追求的目標(biāo),在實(shí)際軟件項(xiàng)目開發(fā)的過程中應(yīng)該盡量向理想模塊靠攏。對(duì)用戶來說,其感興趣是模塊的功能,而不必去理解模塊內(nèi)部的結(jié)構(gòu)和原理。關(guān)于模塊化——這個(gè)是本步驟的實(shí)質(zhì)。模塊化的含義:把系統(tǒng)分解成若干個(gè)能完成獨(dú)立功能的模塊。一般按功能分解,分解到成為一個(gè)小的功能對(duì)應(yīng)單一的模塊為止。一般一個(gè)模塊內(nèi)包含的語句在30~50條左右較好(指高級(jí)語言)。模塊化原則:降低系統(tǒng)中模塊之間的耦合(聯(lián)結(jié))程度,提高每個(gè)模塊的獨(dú)立性、聚合度。模塊的耦合度:就是某模塊(類)與其它模塊(類)之間的關(guān)聯(lián)、感知和依賴的程度。耦合度的強(qiáng)弱依賴于4個(gè)因素:一個(gè)模塊對(duì)另一個(gè)模塊的調(diào)用一個(gè)模塊向另一個(gè)模塊傳遞的數(shù)據(jù)量一個(gè)模塊施加到另一個(gè)模塊的控制的多少模塊之間接口的復(fù)雜程度模塊的耦合度理解:耦合度簡(jiǎn)單來說就是模塊之間的聯(lián)系緊密程度,有低耦合與高耦合之分,聯(lián)系越緊密就是高耦合度,反之則是低耦合度;從軟件的維護(hù)來看,低耦合度的代碼容易維護(hù)修改,高耦合的代碼是不好的,不容易維護(hù)。數(shù)據(jù)庫設(shè)計(jì)數(shù)據(jù)庫設(shè)計(jì)概念:主要是數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì),設(shè)計(jì)在數(shù)據(jù)庫中要?jiǎng)?chuàng)建的相關(guān)表、視圖等數(shù)據(jù)庫實(shí)體。數(shù)據(jù)庫的設(shè)計(jì)主要是使用圖形工具——E-R圖來進(jìn)行,在經(jīng)典的結(jié)構(gòu)化的程序設(shè)計(jì)方法中分為以下三個(gè)模型:E-R圖概念模型以用戶的角度來描述數(shù)據(jù)庫結(jié)構(gòu),一般在需求分析時(shí)完成。概念模型:描述從用戶角度看到的數(shù)據(jù)。E-R圖:實(shí)體-聯(lián)系圖(Entity-RelationshipDiagram)。E-R概念模型的圖形表示如下。實(shí)體:是生活中的萬事萬物,也就是對(duì)象,用矩形框來表示,矩形框內(nèi)標(biāo)明實(shí)體的名稱。如圖6.2-1所示,學(xué)生、老師、班級(jí)分別都是獨(dú)立的實(shí)體。圖6.2-1實(shí)體的圖形表示關(guān)系:指實(shí)體與實(shí)體之間的聯(lián)系。用一個(gè)菱形框來表示,菱形框內(nèi)標(biāo)明關(guān)系的名稱。如圖6.2-2所示,屬于(學(xué)生屬于某個(gè)班級(jí))、教(老師教學(xué)生)都是關(guān)系。圖6.2-2關(guān)系的圖形表示實(shí)體屬性:指實(shí)體具有的特征。比如人(實(shí)體)的身高體重,或者長(zhǎng)方形(實(shí)體)的長(zhǎng)和寬都是實(shí)體的屬性。實(shí)體屬性用橢圓來表示,橢圓內(nèi)標(biāo)明屬性的名稱。如圖6.2-3所示,姓名和學(xué)號(hào)都是實(shí)體(學(xué)生)的屬性。圖6.2-3實(shí)體屬性的表示了解了實(shí)體、實(shí)體屬性、實(shí)體間關(guān)系的表示后,用折線或直接將三者有機(jī)連接起來就構(gòu)成了E-R圖的概念模型,如圖6.2-4所示,學(xué)生、老師、班級(jí)三個(gè)實(shí)體的概念模型。圖6.2-4學(xué)生、老師、班級(jí)的E-R概念模型注:E-R圖的概念模型在項(xiàng)目開發(fā)過程中并非是必須的,它在設(shè)計(jì)復(fù)雜的數(shù)據(jù)庫的時(shí)候比較適用,或者在項(xiàng)目沒有確定使用何種數(shù)據(jù)庫的時(shí)候比較適用,或者對(duì)于有一定編程經(jīng)驗(yàn)的用戶深入討論需求的時(shí)候比較適用,或者對(duì)于沒有進(jìn)行過數(shù)據(jù)庫設(shè)計(jì)的初學(xué)者來說,培養(yǎng)他們的E-R圖設(shè)計(jì)入門是相當(dāng)不錯(cuò)的主意。隨著目前OOD(面向?qū)ο笤O(shè)計(jì))思想的運(yùn)用,E-R圖的概念模型已經(jīng)用得不多,本書的項(xiàng)目省略該模型。E-R圖邏輯模型E-R圖的邏輯模型:描述從程序員角度看到的數(shù)據(jù),一般在概要設(shè)計(jì)時(shí)完成。E-R圖的邏輯模型表示如下。實(shí)體與實(shí)體屬性:其圖形表示如圖6.2-5a所示,用一個(gè)矩形框表示實(shí)體,矩形框頂部外面標(biāo)注實(shí)體名稱,矩形框內(nèi)部分成上下兩欄,上欄里邊填寫主鍵屬性(PK),下欄里邊填寫非主鍵屬性。圖6.2-5a實(shí)體與實(shí)體屬性的表示一個(gè)學(xué)生實(shí)體圖如圖6.2-5b所示,該學(xué)生實(shí)體有主鍵屬性學(xué)號(hào),非主鍵屬性姓名等。圖6.2-5b學(xué)生實(shí)體圖(含學(xué)生實(shí)體屬性)表示實(shí)體之間的關(guān)系:使用外鍵關(guān)系來表示,只能表示1:1或1:n(1對(duì)多)的關(guān)系,對(duì)于n:n(多對(duì)多)的關(guān)系要轉(zhuǎn)換成兩個(gè)1:n的關(guān)系。如圖6.2-6a所示,用一條帶箭頭的直線來連接兩個(gè)實(shí)體,箭頭所指的一方(實(shí)體2的主鍵屬性)是1,另一方(實(shí)體1的非主鍵屬性)是n(多),那么實(shí)體1與實(shí)體2的關(guān)系就是n:1(多對(duì)一)的關(guān)系。圖6.2-6aE-R圖邏輯模型的實(shí)體之間的關(guān)系表示兩個(gè)實(shí)體1:n關(guān)系的E-R圖舉例:如圖6.2-6b所示,學(xué)生與班級(jí)的E-R圖,學(xué)生與班級(jí)的關(guān)系是多個(gè)學(xué)生屬于同一個(gè)班級(jí),學(xué)生實(shí)體的外鍵屬性引出一根箭頭指向班級(jí)實(shí)體的主鍵屬性,可見是多對(duì)一的關(guān)系(n:1)。圖6.2-6b學(xué)生與班級(jí)的E-R圖——n:1關(guān)系的例子兩個(gè)實(shí)體n:n關(guān)系的轉(zhuǎn)換舉例:完成學(xué)生選課事件中
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025湖南省建筑安全員《C證》考試題庫及答案
- 2025甘肅省建筑安全員-C證(專職安全員)考試題庫
- 2025年山西省建筑安全員A證考試題庫及答案
- XX科技集團(tuán)開工大吉課件模板
- 班主任工作經(jīng)驗(yàn)交流52
- 《心理健康案例》課件
- 《撲動(dòng)及纖顫》課件
- 三年級(jí)科學(xué)復(fù)習(xí)
- 單位人力資源管理制度范文大全十篇
- 單位管理制度展示大全人員管理篇
- 第一學(xué)期六年級(jí)家長(zhǎng)會(huì)課件1
- 年產(chǎn)120萬噸氧化鋁拜爾法生產(chǎn)高壓溶出工藝設(shè)計(jì)
- APQP產(chǎn)品開發(fā)流程與管理(汽車行業(yè))課件
- 2021年監(jiān)理工程師《建設(shè)工程案例分析(水利工程)》真題及答案
- 中心衛(wèi)生院關(guān)于成立按病種分值付費(fèi)(DIP)工作領(lǐng)導(dǎo)小組及制度的通知
- 醫(yī)院感染監(jiān)測(cè)清單
- 社區(qū)老年人項(xiàng)目計(jì)劃書
- 《1.我又長(zhǎng)大了一歲》教學(xué)課件∣泰山版
- 斷裂力學(xué)-1緒論課件
- 深基坑工程驗(yàn)收表
- 醫(yī)學(xué)交流課件:RCT的基本概念及原則(PPT 37頁)
評(píng)論
0/150
提交評(píng)論