2015-02-10 116 views
1

我有一個場景來設計一個數據庫Java API Documentation,其中我必須在給定的一段代碼中提供有關每個類和方法的信息。例如,考慮:如何爲結構良好的Java API文檔設計數據庫?

1. main() 
2. { 
3. String foo="test"; 
4. foo.substring(1,2); 
5. } 

在這裏,我必須展示從Java文檔類String和方法substring文檔(中的類/方法可以是任何有效類/方法)。

我的觀察:

的類可以重複在不同的包,所以他們不能是唯一的。方法也一樣。 方法名foo()可以是:

1)這個類

2)所述的方法重寫一些父類

3)的方法簡單地繼承的方法。

有了這個信息,我有如下表:

1)

CREATE TABLE "JAVACLASSDESCRIPTION" 
    ( "CLASSFULLNAME" VARCHAR2(400) NOT NULL ENABLE, 
    "CLASSNAME" VARCHAR2(400), 
    "CLASSDEFINATION" CLOB, 
    "CLASSDECLARATION" CLOB, 
    "INHERITEDCLASSES" CLOB, 
    CONSTRAINT "JAVACLASSDESCRIPTION_PK" PRIMARY KEY ("CLASSFULLNAME") ENABLE 
    ) ; 

INHERITEDCLASSES是一個多值attribute.I知道這是一個非常可憐的東西,但我有原因。 1)首先檢查該方法是否可用於JAVAMETHODDESCRIPTION表(可以是類方法本身,也可以是覆蓋方法)。 2)如果不是,它必須是爲某些父類繼承的方法。因此,我們必須表明,該家長的方法的文檔class.To保存多個搜索,INHERITEDCLASSES包含數值如下(對於一些隨機類):

java.lang.Object: clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait 

,這樣它的父類是其次java.lang.Object方法列表,這樣很容易匹配方法名稱。

2)

CREATE TABLE "JAVAMETHODDESCRIPTION" 
    ( "CLASSFULLNAME" VARCHAR2(400) NOT NULL ENABLE, 
    "METHODNAME" VARCHAR2(400) NOT NULL ENABLE, 
    "METHODDECLARATION" VARCHAR2(400), 
    "METHODDEFINATION" CLOB 
    ) ;ALTER TABLE "JAVAMETHODDESCRIPTION" ADD CONSTRAINT "JAVAMETHODDESCRIPTION_FK" FOREIGN KEY ("CLASSFULLNAME") 
     REFERENCES "JAVACLASSDESCRIPTION" ("CLASSFULLNAME") ON DELETE CASCADE ENABLE; 

輸出示例:

enter image description here

我知道有很多的設計,我issues.How可以提高我的數據庫設計的?

編輯:

關於多值項,如果分解到另一個表可能導致到冗餘entries.For如。 Object班是所有人的超班。

Link for documentation page

回答

0

很難說,一切,因爲很多東西是不確定的,但:

需要考慮的幾件事:加載的java類由唯一的全名(xyzMyclass $ Inner.class)標識,它是類加載器。如果你不關心加載的類,而只關心源代碼(javadoc),那麼你可能會跳過類加載器。

的javadoc可以在方法,類,包和現場級(每個人都可以通過簽名來唯一標識)

如果你想支持的javadoc繼承方法,那麼你需要多繼承模型(javadoc中能也可以從接口繼承),並在您的應用程序中根據請求遍歷樹頂部以顯示javadoc。其他選擇是在將內容保存到db期間執行遍歷。另一件事是庫和jdk的版本控制。不知道你是否想支持不同的版本。

+0

如何創建它們作爲對象? – 2015-02-11 15:30:55

+0

我不知道你是什麼意思。是'他們'?你想如何在對象數據庫中存儲對象? – piotrek 2015-02-11 15:58:27

+0

創建嵌套對象來代替多值屬性(存儲爲類型對象) – 2015-02-12 21:09:56

0

換去了解這樣的事情的最好方法,就是進入了第三範式。你可能不會呆在那裏,但至少通過「看到它」,你會在你的系統,關係等方面學到一些東西。

http://en.wikipedia.org/wiki/Third_normal_form

一旦你到了那個階段,然後開始看你有什麼,問問自己是如何與您的具體情況的行爲。即你是如何訪問它..莫非要表現不佳,這將有助於非規範化的東西一點點地幫助提高查詢性能,等等,等等

+0

我知道3NF或BCNF是什麼。它只是在這個非常特殊的情況下我無法弄清楚。除了多值事物(如果我認爲它是單個字符串),設計是在3NF。 – 2015-02-10 18:10:41

+0

你的實體是什麼? 「JavaClass」? (JavaClassDescription聽起來像JavaClass的屬性)。從那裏開始。給它一個PK,並開始問每個屬性/ attirbute是什麼。不要組合東西。 (即名稱,描述,聲明,繼承類(多 - 這可能表明另一個表 - - )..等 – Ditto 2015-02-10 18:14:12

+0

請參閱我的編輯 – 2015-02-10 18:46:35