如何为结构良好的Java API文档设计DataBase?

时间:2015-02-10 17:54:49

标签: database oracle

我有一个为Java API Documentation设计数据库的场景,我必须在其中提供有关给定代码段中每个类和方法的信息。例如,考虑:

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

在这里,我必须从Java文档中显示类 String 和方法 substring 的文档(类/方法可以是任何有效的类/方法)。

我的观察:

这些类可能会在各种包中重复,因此它们不能是唯一的。方法也是如此。 方法名称foo()可以是:

1)本课程的方法

2)覆盖某些父类的方法

3)简单地继承a方法。

有了这些信息,我有以下表格:

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是一个多值属性。我知道这是一个非常糟糕的事情,但我有理由。     1)首先检查方法是否在JAVAMETHODDESCRIPTION表中可用(作为类方法本身或覆盖方法)。 2)如果没有,它必须是一个为某些父类继承的方法。所以我们必须显示这个父类的方法的文档。为了保存多个搜索,值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

我知道有很多设计问题。如何改进我的数据库设计?

修改

关于多值条目,如果分解为另一个表可能导致冗余条目。例如。 Object类是所有人的超类。

Link for documentation page

2 个答案:

答案 0 :(得分:0)

进行类似这样的事情的最佳方法是进入第3范式。你可能不会留在那里,但至少通过“看到它”,你会学到一些关于你的系统,关系等方面的东西。

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

一旦你进入那个阶段,然后开始查看你拥有的东西,并问问自己它将如何适应你的具体情况。即你是如何访问它的...它是否会表现不佳,是否有助于对事物进行非规范化以帮助提高查询性能等等。

答案 1 :(得分:0)

很难说出一切,因为很多事情都没有说明,但是:

要考虑的一些事项:加载的java类由唯一的全名(x.y.z.Myclass $ Inner.class)和它的类加载器标识。如果你不关心加载的类但只关心源代码(javadoc)那么你可以跳过类加载器。

javadoc可以在方法,类,包和字段级别(每个都可以通过签名唯一标识)

如果你想支持继承方法的javadoc,那么你需要建模多重继承(javadoc也可以从接口继承),并在你的应用程序中遍历那个树顶请求显示javadoc。其他选项是在将内容保存到db

期间进行遍历

另一件事是库和jdk的版本控制。不知道你是否想要支持不同的版本。