版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
重慶正大軟件學(xué)院軟件系《MVC框架程序設(shè)計》電子教案重慶正大軟件學(xué)院軟件系《MVC框架程序設(shè)計》課程組重慶正大軟件職業(yè)技術(shù)學(xué)院教案(項目類)授課對象系別軟件系本次課學(xué)時4學(xué)時年級班次大二章節(jié)題目第6章項目需求分析目的要求(含技能要求)理解概要設(shè)計的概念理解概要設(shè)計的過程理解模塊概念和模塊化原則,會進行模塊化(綜合應(yīng)用)理解數(shù)據(jù)庫設(shè)計的內(nèi)容E-R圖的制作(綜合應(yīng)用)本節(jié)重點理解數(shù)據(jù)庫設(shè)計的內(nèi)容本節(jié)難點理解數(shù)據(jù)庫設(shè)計的內(nèi)容教學(xué)方法項目教學(xué)法教學(xué)用具機房、屏幕廣播問題引入通過簡化進銷存項目,從而引出本次課程。難點與重點講解方法引導(dǎo)、分析、講解、實作演示本次課小結(jié)課程小結(jié)教后禮記討論、思考題、作業(yè)(含實訓(xùn)作業(yè))完成本次課的課堂任務(wù)填寫實驗報告任務(wù)介紹(5分鐘)根據(jù)簡化供銷存系統(tǒng)的需求說明書,進行概要設(shè)計,形成相應(yīng)的概要設(shè)計說明書。任務(wù)解析(50-60分鐘)軟件系統(tǒng)模塊化制定本系統(tǒng)的體系結(jié)構(gòu)進行數(shù)據(jù)設(shè)計詳細步驟軟件系統(tǒng)模塊化根據(jù)需求分析中的功能界定,結(jié)合本節(jié)任務(wù)解析中模塊化的相關(guān)內(nèi)容進行簡化進銷存系統(tǒng)的模塊化如圖6.2-8所示。圖6.2-8簡化進銷存模塊化制定本系統(tǒng)的體系結(jié)構(gòu)使用SSH框架的體系結(jié)構(gòu)如圖6.2-9所示。圖6.2-9系統(tǒng)的體系結(jié)構(gòu)進行數(shù)據(jù)設(shè)計首先,按照任務(wù)解析的相關(guān)內(nèi)容設(shè)計本系統(tǒng)E-R圖的概念模型,如圖6.2-10所示,本書這里采用了靜態(tài)模型的類圖來描述簡化進銷存系統(tǒng)的E-R圖,作圖軟件使用的是微軟的visio2007。圖6.2-10本系統(tǒng)E-R圖的概念模型其次,按照圖6.2-10并根據(jù)hibernate框架的實體類設(shè)計規(guī)范編寫實體類和對應(yīng)的映射文件。分別如下:(本書將所有實體類和映射文件存放在com.zds.slms.domain包下)客戶檔案:實體類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方法這里略}客戶檔案:實體類映射文件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>客戶編號</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>進貨單</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>員工檔案:實體類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方法這里略}員工檔案:實體類映射文件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>員工編號</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>商品檔案:實體類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方法這里省略}商品檔案:實體類映射文件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>商品編號</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>單價</comment></column></property><setname="stockins"table="stockin"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.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>訂單:實體類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方法這里省略}訂單:實體類映射文件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>員工編號</comment> </column> </many-to-one> <many-to-onename="merchandise"class="com.zds.slms.domain.Merchandise" fetch="select"> <columnname="merchandiseid"not-null="true"> <comment>商品編號</comment> </column> </many-to-one> <many-to-onename="client"class="com.zds.slms.domain.Client" fetch="select"> <columnname="clientid"not-null="true"> <comment>客戶編號</comment> </column> </many-to-one> <propertyname="code"type="string"> <columnname="code"length="11"not-null="true"> <comment>訂單編號</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>進貨單:實體類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方法這里省略}進貨單:實體類映射文件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>商品編號</comment> </column> </many-to-one> <many-to-onename="client"class="com.zds.slms.domain.Client" fetch="select"> <columnname="clientid"not-null="true"> <comment>客戶編號</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>進貨單編號</comment> </column> </property> <propertyname="amount"type="int"> <columnname="amount"not-null="true"> <comment>進貨數(shù)量</comment> </column> </property> <propertyname="price"type="float"> <columnname="price"precision="5"scale="2"not-null="true"> <comment>進貨單價</comment> </column> </property> <propertyname="money"type="float"> <columnname="money"precision="10"scale="2"not-null="true"> <comment>進貨總額</comment> </column> </property> <propertyname="stockindate"type="string"> <columnname="stockindate"length="10"not-null="true"> <comment>進貨日期</comment> </column> </property> </class></hibernate-mapping>到此為止,項目簡化進銷存的概要設(shè)計就算基本完成了根據(jù)任務(wù)提出問題(45-55分鐘)概要設(shè)計是干什么的?概要設(shè)計如何進行?概要說明書要寫些什么?問題解析(45-55分鐘)了解概要設(shè)計概要設(shè)計是軟件項目在完成需求分析之后的首要步驟,其內(nèi)容是制定系統(tǒng)的設(shè)計方案,確定軟件的總體結(jié)構(gòu),在涉及到大型數(shù)據(jù)處理的系統(tǒng)時,還需要進行數(shù)據(jù)庫設(shè)計。概要設(shè)計目的:(1)將軟件系統(tǒng)需求轉(zhuǎn)換為未來系統(tǒng)的設(shè)計;(2)逐步開發(fā)強壯的系統(tǒng)構(gòu)架;(3)使設(shè)計適合于實施環(huán)境,為提高性能而進行設(shè)計;(4)結(jié)構(gòu)應(yīng)該被分解為模塊和庫。概要設(shè)計的主要任務(wù):制定規(guī)范——代碼體系、接口規(guī)約、命名規(guī)則。這是項目小組今后共同作戰(zhàn)的基礎(chǔ),有了開發(fā)規(guī)范和程序模塊之間和項目成員彼此之間的接口規(guī)則、方式方法,大家就有了共同的工作語言、共同的工作平臺,使整個軟件開發(fā)工作可以協(xié)調(diào)有序地進行。概要設(shè)計如何進行根據(jù)需求分析提出方案首先,列出項目需求分析階段及之前的相關(guān)文檔:需求規(guī)格說明書成本、效益分析進度計劃需求分析的圖形工具(用例圖、業(yè)務(wù)流程圖等)其次,根據(jù)列出的文檔提出多個可能的項目實現(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ù)難點的解決方案,如系統(tǒng)的核心算法等)。選取合理的方案從上一步得到的一系列供選擇的方案中選取若干個合理的方案,通常至少選取低成本、中等成本和高成本的三種方案。根據(jù)系統(tǒng)分析確定的目標(biāo),來判斷哪些方案是合理的。推薦最佳方案綜合分析對比各種合理方案的利弊,推薦一個最佳的方案。功能分解對用例圖、業(yè)務(wù)流程圖等進一步細化,進行功能分解。這一步為下一步模塊化做準(zhǔn)備。設(shè)計軟件結(jié)構(gòu)該步驟確定系統(tǒng)為實現(xiàn)用戶要求的功能需要哪些模塊;確定模塊的層次結(jié)構(gòu);確定模塊的相互調(diào)用關(guān)系:頂層模塊調(diào)用它的下層模塊以實現(xiàn)程序的完整功能,每個下層模塊再調(diào)用更下層的模塊,最下層的模塊完成最具體的功能。當(dāng)模塊劃分出來并具有層次關(guān)系后,軟件結(jié)構(gòu)也就確定了,一般通過圖形工具——層次圖或結(jié)構(gòu)圖來描繪軟件結(jié)構(gòu)。此步驟實質(zhì)就是確定模塊及模塊間的層次關(guān)系。關(guān)于模塊——模塊等于用戶提出的功能么?模塊的定義:具有四種屬性的一組程序語句稱為一個模塊。四種屬性是:輸入/輸出:一個模塊的輸入/輸出都是指同一個調(diào)用者。邏輯功能:指模塊能夠做什么事,表達了模塊把輸入轉(zhuǎn)換成輸出的功能,可以是單純的輸入/輸出功能。運行程序:指模塊如何用程序?qū)崿F(xiàn)其邏輯功能。內(nèi)部數(shù)據(jù):指屬于模塊自己的數(shù)據(jù)??梢?,模塊并不等于功能。關(guān)于模塊的屬性——模塊有什么屬性呢?外部屬性:輸入/輸出、邏輯功能。內(nèi)部屬性:運行程序、內(nèi)部數(shù)據(jù)。在結(jié)構(gòu)化系統(tǒng)設(shè)計中,人們主要關(guān)心的是模塊的外部屬性,至于內(nèi)部屬性,將在系統(tǒng)實施工作中完成。關(guān)于模塊的大小——它是固定大小的么?模塊有大有小,它可以是一個程序,也可以是程序中的一個程序段或者一個子程序。關(guān)于理想模塊(黑箱模塊)——是什么樣子的呢?理想模塊的特點:(1)每個理想模塊只解決一個問題;(2)每個理想模塊的功能都應(yīng)該明確,使人容易理解;(3)理想模塊之間的聯(lián)結(jié)關(guān)系簡單,具有獨立性;(4)由理想模塊構(gòu)成的系統(tǒng),容易使人理解,易于編程,易于測試,易于修改和維護。對程序員來說,理想模塊是追求的目標(biāo),在實際軟件項目開發(fā)的過程中應(yīng)該盡量向理想模塊靠攏。對用戶來說,其感興趣是模塊的功能,而不必去理解模塊內(nèi)部的結(jié)構(gòu)和原理。關(guān)于模塊化——這個是本步驟的實質(zhì)。模塊化的含義:把系統(tǒng)分解成若干個能完成獨立功能的模塊。一般按功能分解,分解到成為一個小的功能對應(yīng)單一的模塊為止。一般一個模塊內(nèi)包含的語句在30~50條左右較好(指高級語言)。模塊化原則:降低系統(tǒng)中模塊之間的耦合(聯(lián)結(jié))程度,提高每個模塊的獨立性、聚合度。模塊的耦合度:就是某模塊(類)與其它模塊(類)之間的關(guān)聯(lián)、感知和依賴的程度。耦合度的強弱依賴于4個因素:一個模塊對另一個模塊的調(diào)用一個模塊向另一個模塊傳遞的數(shù)據(jù)量一個模塊施加到另一個模塊的控制的多少模塊之間接口的復(fù)雜程度模塊的耦合度理解:耦合度簡單來說就是模塊之間的聯(lián)系緊密程度,有低耦合與高耦合之分,聯(lián)系越緊密就是高耦合度,反之則是低耦合度;從軟件的維護來看,低耦合度的代碼容易維護修改,高耦合的代碼是不好的,不容易維護。數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫設(shè)計概念:主要是數(shù)據(jù)庫結(jié)構(gòu)設(shè)計,設(shè)計在數(shù)據(jù)庫中要創(chuàng)建的相關(guān)表、視圖等數(shù)據(jù)庫實體。數(shù)據(jù)庫的設(shè)計主要是使用圖形工具——E-R圖來進行,在經(jīng)典的結(jié)構(gòu)化的程序設(shè)計方法中分為以下三個模型:E-R圖概念模型以用戶的角度來描述數(shù)據(jù)庫結(jié)構(gòu),一般在需求分析時完成。概念模型:描述從用戶角度看到的數(shù)據(jù)。E-R圖:實體-聯(lián)系圖(Entity-RelationshipDiagram)。E-R概念模型的圖形表示如下。實體:是生活中的萬事萬物,也就是對象,用矩形框來表示,矩形框內(nèi)標(biāo)明實體的名稱。如圖6.2-1所示,學(xué)生、老師、班級分別都是獨立的實體。圖6.2-1實體的圖形表示關(guān)系:指實體與實體之間的聯(lián)系。用一個菱形框來表示,菱形框內(nèi)標(biāo)明關(guān)系的名稱。如圖6.2-2所示,屬于(學(xué)生屬于某個班級)、教(老師教學(xué)生)都是關(guān)系。圖6.2-2關(guān)系的圖形表示實體屬性:指實體具有的特征。比如人(實體)的身高體重,或者長方形(實體)的長和寬都是實體的屬性。實體屬性用橢圓來表示,橢圓內(nèi)標(biāo)明屬性的名稱。如圖6.2-3所示,姓名和學(xué)號都是實體(學(xué)生)的屬性。圖6.2-3實體屬性的表示了解了實體、實體屬性、實體間關(guān)系的表示后,用折線或直接將三者有機連接起來就構(gòu)成了E-R圖的概念模型,如圖6.2-4所示,學(xué)生、老師、班級三個實體的概念模型。圖6.2-4學(xué)生、老師、班級的E-R概念模型注:E-R圖的概念模型在項目開發(fā)過程中并非是必須的,它在設(shè)計復(fù)雜的數(shù)據(jù)庫的時候比較適用,或者在項目沒有確定使用何種數(shù)據(jù)庫的時候比較適用,或者對于有一定編程經(jīng)驗的用戶深入討論需求的時候比較適用,或者對于沒有進行過數(shù)據(jù)庫設(shè)計的初學(xué)者來說,培養(yǎng)他們的E-R圖設(shè)計入門是相當(dāng)不錯的主意。隨著目前OOD(面向?qū)ο笤O(shè)計)思想的運用,E-R圖的概念模型已經(jīng)用得不多,本書的項目省略該模型。E-R圖邏輯模型E-R圖的邏輯模型:描述從程序員角度看到的數(shù)據(jù),一般在概要設(shè)計時完成。E-R圖的邏輯模型表示如下。實體與實體屬性:其圖形表示如圖6.2-5a所示,用一個矩形框表示實體,矩形框頂部外面標(biāo)注實體名稱,矩形框內(nèi)部分成上下兩欄,上欄里邊填寫主鍵屬性(PK),下欄里邊填寫非主鍵屬性。圖6.2-5a實體與實體屬性的表示一個學(xué)生實體圖如圖6.2-5b所示,該學(xué)生實體有主鍵屬性學(xué)號,非主鍵屬性姓名等。圖6.2-5b學(xué)生實體圖(含學(xué)生實體屬性)表示實體之間的關(guān)系:使用外鍵關(guān)系來表示,只能表示1:1或1:n(1對多)的關(guān)系,對于n:n(多對多)的關(guān)系要轉(zhuǎn)換成兩個1:n的關(guān)系。如圖6.2-6a所示,用一條帶箭頭的直線來連接兩個實體,箭頭所指的一方(實體2的主鍵屬性)是1,另一方(實體1的非主鍵屬性)是n(多),那么實體1與實體2的關(guān)系就是n:1(多對一)的關(guān)系。圖6.2-6aE-R圖邏輯模型的實體之間的關(guān)系表示兩個實體1:n關(guān)系的E-R圖舉例:如圖6.2-6b所示,學(xué)生與班級的E-R圖,學(xué)生與班級的關(guān)系是多個學(xué)生屬于同一個班級,學(xué)生實體的外鍵屬性引出一根箭頭指向班級實體的主鍵屬性,可見是多對一的關(guān)系(n:1)。圖6.2-6b學(xué)生與班級的E-R圖——n:1關(guān)系的例子兩個實體n:n關(guān)系的轉(zhuǎn)換舉例:完成學(xué)生選課事件中
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版小型家用發(fā)電機安全使用指南與心得分享合同3篇
- 二零二五年度水產(chǎn)養(yǎng)殖害蟲防治與養(yǎng)殖環(huán)境合同4篇
- 二零二五版健康養(yǎng)生中心運營合作協(xié)議4篇
- 2025年新能源汽車推廣與應(yīng)用合作協(xié)議3篇
- 2025年度個人快遞包裹安全運輸合同二3篇
- 2025年個人智能穿戴設(shè)備技術(shù)入股協(xié)議4篇
- 2025年度新型材料代工廠技術(shù)保密條款合同4篇
- 二零二五版旅游車租賃合同(含導(dǎo)游服務(wù))3篇
- 保安年終工作總結(jié)簡單版
- 職校酒店禮儀課程設(shè)計
- 2023年上海英語高考卷及答案完整版
- 西北農(nóng)林科技大學(xué)高等數(shù)學(xué)期末考試試卷(含答案)
- 金紅葉紙業(yè)簡介-2 -紙品及產(chǎn)品知識
- 《連鎖經(jīng)營管理》課程教學(xué)大綱
- 《畢淑敏文集》電子書
- 頸椎JOA評分 表格
- 員工崗位能力評價標(biāo)準(zhǔn)
- 定量分析方法-課件
- 朱曦編著設(shè)計形態(tài)知識點
- 110kV變電站工程預(yù)算1
- 某系統(tǒng)安全安全保護設(shè)施設(shè)計實施方案
評論
0/150
提交評論