2015-02-10 2 views
1

У меня есть сценарий для создания базы данных для Java API Documentation, в которой я должен представить информацию о каждом классе и методе в данном фрагменте кода. Например, рассмотрим:Как создать базу данных для хорошо структурированной документации Java API?

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

Здесь я должен показать документацию для класса String и метод substring из Java-документации (классы/методы могут быть любой действительный класс/метод).

Мои наблюдения:

Классы могут повторяться в различных пакетах, поэтому они не могут быть уникальными. То же самое касается методов. Имя метода 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) 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 я могу улучшить свой дизайн базы данных?

EDIT:

О многозначной записи, если разложить на другой стол может привести к излишним entries.For например. Object класс супер класс для всех.

Link for documentation page

ответ

0

трудно сказать все, потому что много вещей неуточнено, но :

несколько вещей, которые следует учитывать: загруженный класс java идентифицируется уникальным полным именем (xyzMyclass $ Inner.class) и его загрузчиком классов. если вам не нужен загруженный класс, а только исходный код (javadoc), то вы, вероятно, можете пропустить загрузчик классов.

Javadoc может быть метод, класс, пакет и полевого уровень (каждый из них может быть однозначно определен подписью)

, если вы хотите поддержать Javadoc для унаследованных методов, то вам нужно моделировать множественное наследование (Javadoc может быть унаследованным также из интерфейсов), и в вашем приложении пересечь это дерево сверху по запросу, чтобы отобразить javadoc. другим вариантом является выполнение перемещения при сохранении содержимого до db

Другая вещь - управление версиями библиотеки и jdk. не знаю, хотите ли вы поддерживать разные версии.

+0

Как насчет их создания в качестве объектов? –

+0

Я не уверен, что вы имеете в виду. это «их»? Как вы хотите хранить объекты в реляционной базе данных? – piotrek

+0

Создайте вложенные объекты вместо многозначных атрибутов (сохранить как объект типа) –

0

Лучший способ идти о чем-то вроде этого, чтобы добраться до 3 нормальной форме. Вы не можете оставаться там, но, по крайней мере, «видя это», вы узнаете несколько вещей о вашей системе, отношениях и т. Д.

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

После того, как вы получите на этой стадии, а затем начать смотреть на то, что у вас есть, и спросите себя, как он будет вести себя с вашей конкретной ситуации. то есть как вы обращаетесь к нему .. это будет плохо работать, помогло бы ли оно немного денормализовать ситуацию, чтобы улучшить производительность запросов и т. д. и т. д.

+0

Я знаю, что такое 3NF или BCNF. Я просто не могу понять это в этом конкретном случае. И кроме этого многозначного thingy (если я считаю, что это единственная строка), дизайн находится в 3NF. –

+0

Что вы думаете? «JavaClass»? (JavaClassDescription звучит как свойство JavaClass). Начните там. Дайте ему ПК и начните спрашивать, что такое каждое свойство/attirbute. Не смешивайте вещи. (т. е. имя, описание, декларация, унаследованные классы (несколько - это может указывать на другую таблицу)) и т. д. – Ditto

+0

См. мое редактирование. –

Смежные вопросы