日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[转载]三、二、一 …… Geronimo!,第 4 部分: 模式

發(fā)布時間:2023/12/18 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转载]三、二、一 …… Geronimo!,第 4 部分: 模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

三、二、一 …… Geronimo!,第 4 部分: 模式


Web 瀏覽器標(biāo)志著由數(shù)據(jù)庫模式開頭的這條路線的終點。如何創(chuàng)建一個好的數(shù)據(jù)庫模式呢?您不僅需要有效的工具;還需要一個計劃。設(shè)計數(shù)據(jù)庫這件事,一半是科學(xué),一半是藝術(shù),那現(xiàn)在就開始操練您的技術(shù)吧。發(fā)掘一些有用的技巧,設(shè)計一個快速、有效地響應(yīng)變化的數(shù)據(jù)庫模式。

當(dāng)您準(zhǔn)備好在軟件荒原中進(jìn)行下一次 探險時,有一件事會逐漸明朗起來:沒有一個好的計劃,探險的路就不會走太遠(yuǎn)。動手去做任何有價值的事情時都需要了解:最終您希望取得怎樣的結(jié)果,并根據(jù)這 一目標(biāo)制訂計劃,這樣就能始終以最終的成功為導(dǎo)向,就像大家所說的那樣,然后仔細(xì)地標(biāo)出達(dá)成這一目標(biāo)的過程中的里程碑事件。最終,創(chuàng)建一個運行良好的系統(tǒng) 的那份激動是相當(dāng)令人滿足的。

Apache Geronimo 全面支持符合標(biāo)準(zhǔn)的數(shù)據(jù)庫系統(tǒng)。但不論您的工具有多好,沒有一個好的計劃來定義如何達(dá)成您的目標(biāo),這些工具還是毫無用處的。


技巧 1:著眼于最終成功。不要忘記目標(biāo)。


Geronimo 包含一大套 Java? 類,這些類專門設(shè)計用于將不同的工具粘連成一個功能整體,從而創(chuàng)建有用的應(yīng)用程序。其中最重要的工具之一就是數(shù)據(jù)庫。數(shù)據(jù)庫是復(fù)雜的,需要一個有效的計劃來創(chuàng)建及操作數(shù)據(jù)庫。

方案和模式

計劃是多種多樣的。一些是松散而又寬泛的;它們省略了大量細(xì)節(jié)而追求一些簡單的目標(biāo),如最大化收益。另一些計劃是緊湊而又具體的;在精確性方面,它們就像是計算機(jī)程序。松散的計劃通常被認(rèn)為是方案,帶有某種不好的含義 —— 即應(yīng)避免該方案。但一個好的、緊湊的、細(xì)節(jié)豐富的計劃被認(rèn)為是模式,其中反映了大量的想法和努力。

現(xiàn)代數(shù)據(jù)庫技術(shù)借用了這一術(shù)語來命名不同數(shù)據(jù)庫技術(shù)之下的數(shù)據(jù)建模時。您可以在使用可擴(kuò)展標(biāo)記語言(Extensible Markup Language, XML)模式、數(shù)據(jù)庫模式、對象模式等的編程世界中看到使用這一術(shù)語的例子。數(shù)據(jù)庫模式 是一項計劃,它定義了數(shù)據(jù)庫的表及各表的字段,并對關(guān)鍵字段予以特殊強(qiáng)調(diào),這些關(guān)鍵字段用于查找其他表中額外的信息。

好的模式不會從天而降。構(gòu)建模式需要詳細(xì)調(diào)研、謹(jǐn)慎思考和有序的流程。這都要從定義目標(biāo)并在整個項目中以目標(biāo)為導(dǎo)向開始。




回頁首


經(jīng)常、明確地溝通

記 住這一點,最佳起點即您和您的客戶期望看到的信息 —— 定義系統(tǒng)使用方式的表單及傳達(dá)信息的 Web 頁面。Geronimo 會忠誠地執(zhí)行應(yīng)用程序代碼、管理會話數(shù)據(jù)及數(shù)據(jù)庫連接,同時動態(tài)地生成客戶(以及他們的客戶)期望看到的頁面。以一種共享的視角來看待未來產(chǎn)品系統(tǒng)的外觀 及其行為是很重要的。通過用 JavaServer Pages(JSP)來制訂頁面原型,您就能夠向客戶展示您的想法,客戶也就能夠提供有關(guān)修改外觀的反饋。

我知道這樣說有點老套,但如果您還沒有清晰地定義前方的目標(biāo),那么可以非常輕松地開辟出通往一項良好計劃的道路。花點時間來定義并精煉客戶將看到的視圖。這樣做最終將讓您漂亮地搞定一切。

例 如,假設(shè)您在為高校學(xué)生簡歷設(shè)計一個 Geronimo Web 應(yīng)用程序,這些簡歷中涵蓋個人信息、工作閱歷及關(guān)于這些學(xué)生的其他各種信息,包括其愛好及興趣。向?qū)W生們展示輸入所有這些信息的表單時,明智的做法是讓表 單保持簡短,且將主要的概念分頁放置:一般學(xué)生信息頁面(如姓名及聯(lián)系信息)、愛好及興趣頁面,工作頁面,等等。一項準(zhǔn)則就是,人們不喜歡填寫帶大量輸入 字段的大型表單,所以應(yīng)盡可能減少輸入字段的數(shù)量。


技巧 2:避免雜亂。一切保持簡明扼要。


在處理大概念時,應(yīng)仔細(xì)觀察記錄間的關(guān)系,將看到一對多的模型 —— 例如,一名學(xué)生對應(yīng)著多份工作或多個俱樂部。這都是將保存學(xué)生聯(lián)系信息的表與保存工作經(jīng)歷或俱樂部經(jīng)歷的表中相分離的明顯信號。(該過程形式上被認(rèn)為是標(biāo)準(zhǔn)化。獲取更多有關(guān)標(biāo)準(zhǔn)化的信息,請查閱本文末尾 參考資料 部分的相關(guān)鏈接。)




回頁首


避免轉(zhuǎn)移目標(biāo)

讓 客戶確認(rèn)這些視圖的最終版本也很重要,這可以避免使您所追逐的目標(biāo)不斷發(fā)生變化。如果沒有在 Geronimo 生成的這些表單和視圖的最初設(shè)計上花足夠的時間,此后必然會遇到麻煩。在 Geronimo 中,可以把表單和視圖設(shè)計為一系列的 JSP 頁面,這些頁面是嵌入了 Java 代碼的超文本標(biāo)記語言(HTML)頁面,這些 Java 代碼則用以在系統(tǒng)處理及顯示值時輸入、輸出及計算它們。


技巧 3:讓客戶確認(rèn)所有的輸入輸出表單。避免轉(zhuǎn)移目標(biāo)。


收集一份良好、長的字段清單,然后繼續(xù)下一階段,概念模式 ,在其中定義系統(tǒng)的概念。學(xué)生簡歷系統(tǒng)的概念模式應(yīng)包括一些摘要性的東西,如工作、專業(yè)、學(xué)校、學(xué)生、俱樂部及愛好。

牢記數(shù)據(jù)庫的構(gòu)建塊及其繼承關(guān)系:數(shù)據(jù)庫 由表 組成,表由字段 組成。在構(gòu)造模式的第一階段中,使用了如學(xué)生及工作等主要的概念來創(chuàng)建輸入表單和輸出報表的初始設(shè)計,目標(biāo)是為數(shù)據(jù)庫中最小單位的元素建立一份清單,即信息字段。這樣的例子包括學(xué)生 ID、總平均成績(GPA)、學(xué)生的專業(yè),他或她的學(xué)校,等等。

稍后,會將這些字段分組到相應(yīng)的表中,并應(yīng)用標(biāo)準(zhǔn)化的規(guī)則來壓縮該模式。現(xiàn)在,只要收集一份將在這些表中用到的字段的清單。




回頁首


從現(xiàn)實到概念

寬泛地講,計算機(jī)程序員們的工作就是去設(shè)計有用的抽象概念,即觀察現(xiàn)實世界中存在的東西,并在計算機(jī)中創(chuàng)建這些東西的有用的模擬物。將這些抽象的概念表現(xiàn)為 Geronimo 類及對象還是數(shù)據(jù)庫表主要取決于您將如何使用它們,以及它們將持續(xù)多久。

例如,年齡是一個隨時間而不斷改變的值,可以通過一個特定的日期加以計算,即出生日期或創(chuàng)建日期。因而,要在數(shù)據(jù)庫中使用出生日期或創(chuàng)建日期。但如果 Age 顯示在之前討論過的原型頁面的其中一個頁面里,最好將該值在代碼中作為 Geronimo 類的一個方法表示,而 Geronimo 類代表了要計算年齡的那個實體。我用實體 的原因是:不論是人類、動物或汽車,出生日期、創(chuàng)建日期及年齡都是一回事。

作為規(guī)則,不要把計算得出的值保存在數(shù)據(jù)庫中。相反,將它們計算所依據(jù)的那個參數(shù)保存起來。因而,當(dāng)一些輸出表(報表或 Web 頁面)中顯示了 Age 時,它應(yīng)該是計算出來的,而不是從數(shù)據(jù)庫中提取出來的。


技巧 4:不要保存能從數(shù)據(jù)庫中計算出來的值。


日期計算在 Geronimo 系統(tǒng)中并不困難,因為定義了 Calendar 和 Date 類。系統(tǒng)通常只意識到當(dāng)前的日期和時間,所以讓計算機(jī)從當(dāng)前日期中提取出出生日期來獲得年齡值是一件微不足道的事。相同的原則也應(yīng)用到其他日期計算中,如運輸時間(交貨日期減去裝運時期),產(chǎn)品保質(zhì)期計算(當(dāng)前日期減去購買日期,再與保質(zhì)期相比較),等等。清單 1 演示了 Geronimo 計算年齡的方法。


清單 1. 計算年齡的 Geronimo 代碼

import java.util.Calendar;
import java.util.Date;

public class ddays
{
// Testing Framework.

public static void main(String[] args)
{
// Two date instances.
Calendar date1 = Calendar.getInstance();
Calendar date2 = Calendar.getInstance();

// Set the Birth Date.
date1.set(1975,00,17); // January = 00.

int delta = dDays(date2.getTime(), date1.getTime());
double dyears = (double) delta / 365.25;

System.out.println("Date 1: " + date1.getTime());
System.out.println("Date 2: " + date2.getTime());
System.out.println("Delta: " + delta + " Days");
System.out.println("Age: " + (int) dyears + " Years");
}

// Days between dates.

public static int dDays(Date date1, Date date2)
{
int theDiff = 0;
int totalDiff = 0;
Calendar former = Calendar.getInstance();
Calendar latter = Calendar.getInstance();

if (date1.compareTo(date2) < 0)
{
former.setTime(date1);
latter.setTime(date2);
}
else
{
former.setTime(date2);
latter.setTime(date1);
}

while (former.get(Calendar.YEAR) != latter.get(Calendar.YEAR))
{
theDiff = 365 * (latter.get(Calendar.YEAR) - former.get(Calendar.YEAR));
totalDiff += theDiff;
former.add(Calendar.DAY_OF_YEAR, theDiff);
}

if (former.get(Calendar.DAY_OF_YEAR) != latter.get(Calendar.DAY_OF_YEAR))
{
theDiff = latter.get(Calendar.DAY_OF_YEAR) - former.get(Calendar.DAY_OF_YEAR);
totalDiff += theDiff;
former.add(Calendar.DAY_OF_YEAR, theDiff);
}

return totalDiff;
}
}

在第二階段,應(yīng)專注于要設(shè)計的表以及表中要包含的字段。例 如,需要一個帶基本學(xué)生信息的學(xué)生表,一個帶學(xué)生及其工作的詳細(xì)時間信息的工作表,及其他包含愛好、興趣的表,等等。與保持程序定義簡明扼要相同,表也應(yīng) 該保持簡短。信息分解是標(biāo)準(zhǔn)化過程的一部分,其設(shè)計目的是為了防止各原子信息單元出現(xiàn)重復(fù),并且,也必需要有清晰的方式來構(gòu)建查詢,從而獲取每一點信息。




回頁首


弄清概念

在概念模式后出現(xiàn)的是邏輯模式 —— 用更多的細(xì)節(jié)定義概念,并顯示實體之間的關(guān)系的數(shù)據(jù)模型。在第三階段,用更具體的關(guān)系來修改這些將存在于不同表的實體間的概念。學(xué)生 ID 是一個關(guān)鍵字段,它用以連接學(xué)生個人信息與他或她從事過的工作、該學(xué)生從屬的俱樂部及該學(xué)生上過的學(xué)校。

弄 清這些概念也意味著將對應(yīng)用于數(shù)據(jù)庫的查詢類型有所了解。絕大部分搜索都是在搜索關(guān)鍵字段嗎?還是大量的搜索都不包含這些關(guān)鍵字段?設(shè)計數(shù)據(jù)庫引擎是為了 基于指定關(guān)鍵字段構(gòu)建表中記錄的索引。在許多例子中,這些索引是自動生成的,且極大地提升了查找的速度,即基于指定關(guān)鍵字段提供查找。


技巧 5:確保選定的關(guān)鍵字段真實地反映要做的查詢。


因 而,每個概念,即每張表,使用一個有邏輯的主鍵并使將要應(yīng)用于該概念中的查詢有意義是很重要的。工作表將包含學(xué)生曾經(jīng)從事過的工作的簡短信息,其目的不是 成為一份可供搜索的公司清單。每個工作實體將以學(xué)生 ID 作為主鍵,這樣在自動構(gòu)建了學(xué)生簡歷時,數(shù)據(jù)庫只需用最少的努力即可列出與每個學(xué)生相關(guān)的工作。

當(dāng)不使用關(guān)鍵字段而構(gòu)建記錄清單時,計算機(jī)的處理速度會大大降低。Job 表用于匯集學(xué)生們曾經(jīng)從事過的工作的清單,將這張表用于任何其他目的是無效的。




回頁首


標(biāo)準(zhǔn)化

數(shù)據(jù)庫標(biāo)準(zhǔn)化是一個重要課題,完全可以就其寫出許多著作,而且已經(jīng)有了許多相關(guān)著作。標(biāo)準(zhǔn)化消除了數(shù)據(jù)冗余,并對數(shù)據(jù)進(jìn)行有效的組織。標(biāo)準(zhǔn)化過程試圖確保所有數(shù)據(jù)庫屬性只存儲一個值,任何有多個值的屬性應(yīng)該表示在不同的表中。例如,請看下列學(xué)生記錄:


Student: John Smith, College GPA: 3.20

學(xué)生和他或她的 GPA 之間存在著一個一對一的關(guān)系。這個關(guān)系有時被稱為 1NF,或第一范式,根據(jù)標(biāo)準(zhǔn)化規(guī)則,這就是您要實現(xiàn)的目標(biāo)。每個學(xué)生都有且只有一個相關(guān)聯(lián)的大學(xué) GPA。

但相同的學(xué)生在其大學(xué)生涯中卻有多份不同的工作。結(jié)果是,他可能具有這樣一條學(xué)生記錄:


Student: John Smith, Job: Smith Brothers, Campus Coffee Shop, Bob's Burgers

由于一個屬性(job)代表了許多不同的值,標(biāo)準(zhǔn)化的規(guī)則要求將這些值轉(zhuǎn)移到一個不同的表中,即 Job 表中,從而滿足這些規(guī)則。隨后可以通過學(xué)生 ID 對 Job 表建立索引,且檢索每份從事過的工作將會以一種有序且高效的方式進(jìn)行。


技巧 6:標(biāo)準(zhǔn)化規(guī)則很重要。了解并應(yīng)用這些規(guī)則。


涵蓋所有標(biāo)準(zhǔn)化規(guī)則或提供這些規(guī)則所依據(jù)的數(shù)學(xué)背景知識已超出了本文的范圍。任何想要創(chuàng)建數(shù)據(jù)庫系統(tǒng)的人們必需熟悉標(biāo)準(zhǔn)化的概念,只要說明這個就夠了。(參見 參考資料,獲取一份關(guān)于標(biāo)準(zhǔn)化的優(yōu)秀文章的鏈接列表。)




回頁首


結(jié)束語

許多工具都能幫助您創(chuàng)建良好的數(shù)據(jù)庫模式,就好像許多工具都能協(xié)助設(shè)計面向?qū)ο蟮南到y(tǒng)一樣。值得花些時間來探究這些工具和技術(shù),并通過實踐提高您的技術(shù)水平。現(xiàn)代的業(yè)務(wù)運營在數(shù)據(jù)庫和 Web 站點之上,Geronimo 是將這兩者整合到一起的一種強(qiáng)大工具。

來自 “ ITPUB博客 ” ,鏈接:http://blog.itpub.net/374079/viewspace-130304/,如需轉(zhuǎn)載,請注明出處,否則將追究法律責(zé)任。

轉(zhuǎn)載于:http://blog.itpub.net/374079/viewspace-130304/

總結(jié)

以上是生活随笔為你收集整理的[转载]三、二、一 …… Geronimo!,第 4 部分: 模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。